it-swarm-id.com

Membagi perintah panjang dalam beberapa baris melalui file batch Windows

Bagaimana saya bisa membagi perintah panjang lebih dari beberapa baris dalam file batch?

637
Dan

Anda dapat memecah garis panjang dengan tanda sisir ^ selama Anda ingat bahwa tanda sisipan dan baris baru yang mengikutinya benar-benar dihapus. Jadi, jika harus ada ruang di mana Anda melanggar garis, sertakan ruang. ( Lebih dari itu di bawah ini. )

Contoh:

copy file1.txt file2.txt

akan ditulis sebagai:

copy file1.txt^
 file2.txt
801
Wayne

Aturan untuk caret adalah:

Tanda sisipan di akhir baris, tambahkan baris berikutnya, karakter pertama dari baris ditambahkan akan diloloskan.

Anda dapat menggunakan tanda sisir beberapa kali, tetapi garis lengkap tidak boleh melebihi panjang garis maksimum ~ 8192 karakter (Windows XP, Windows Vista, dan Windows 7).

echo Test1
echo one ^
two ^
three ^
four^
*
--- Output ---
Test1
one two three four*

echo Test2
echo one & echo two
--- Output ---
Test2
one
two

echo Test3
echo one & ^
echo two
--- Output ---
Test3
one
two

echo Test4
echo one ^
& echo two
--- Output ---
Test4
one & echo two

Untuk menekan keluarnya karakter berikutnya, Anda dapat menggunakan redirection.

Pengalihan harus tepat sebelum tanda sisipan. Tetapi ada satu keingintahuan dengan pengalihan sebelum tanda sisipan.

Jika Anda menempatkan token di caret token dihapus.

echo Test5
echo one <nul ^
& echo two
--- Output ---
Test5
one
two


echo Test6
echo one <nul ThisTokenIsLost^
& echo two
--- Output ---
Test6
one
two

Dan juga dimungkinkan untuk menanamkan umpan garis ke dalam string:

setlocal EnableDelayedExpansion
set text=This creates ^

a line feed
echo Test7: %text%
echo Test8: !text!
--- Output ---
Test7: This creates
Test8: This creates
a line feed

Baris kosong penting untuk kesuksesan. Ini hanya berfungsi dengan ekspansi yang tertunda, jika tidak sisa baris akan diabaikan setelah umpan baris.

Ini berfungsi, karena tanda sisipan di ujung baris mengabaikan umpan baris berikutnya dan lolos dari karakter berikutnya, bahkan jika karakter berikutnya juga merupakan umpan baris (carriage return selalu diabaikan dalam fase ini).

240
jeb

(Ini pada dasarnya adalah penulisan ulang dari jawaban Wayne tetapi dengan kebingungan di sekitar tanda sisir dibersihkan. Jadi saya telah mempostingnya sebagai CW. Saya tidak malu mengedit. jawaban, tetapi benar-benar menulis ulang mereka tampaknya tidak sesuai.)

Anda dapat memecah garis panjang dengan tanda sisipan (^), ingatlah bahwa tanda sisipan dan baris baru yang mengikutinya dihapus seluruhnya dari perintah, jadi jika Anda meletakkannya di tempat ruang akan diperlukan (seperti antara parameter), pastikan untuk memasukkan spasi juga (baik sebelum ^, atau di awal baris berikutnya - bahwa pilihan terakhir dapat membantu membuatnya lebih jelas itu adalah kelanjutan).

Contoh: (semua diuji pada Windows XP dan Windows 7)

xcopy file1.txt file2.txt

dapat ditulis sebagai:

xcopy^
 file1.txt^
 file2.txt

atau

xcopy ^
file1.txt ^
file2.txt

atau bahkan

xc^
opy ^
file1.txt ^
file2.txt

(Yang terakhir berfungsi karena tidak ada spasi di antara xcdan ^, dan tidak ada spasi di awal baris berikutnya. Jadi ketika Anda menghapus ^ dan baris baru, Anda mendapatkan ...xcopyname__.)

Untuk keterbacaan dan kewarasan, mungkin sebaiknya memisahkan hanya antara parameter (pastikan untuk memasukkan spasi).

Pastikan ^ adalah bukan hal terakhir dalam file batch, karena --- tampaknya menjadi masalah utama dengan it .

59
T.J. Crowder

Berbagai perintah dapat dimasukkan dalam tanda kurung dan tersebar di berbagai baris; jadi sesuatu seperti echo hi && echo hello dapat dimasukkan seperti ini:

( echo hi
  echo hello )

Juga variabel dapat membantu:

set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE"
if exist %AFILEPATH% (
  start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING...
) else (
...

Saya juga memperhatikan dengan tanda sisipan (^) bahwa syarat-syarat if menyukai mereka untuk mengikuti hanya jika ada ruang:

if exist ^
14
Todd Partridge

Namun tampaknya membelah di tengah-tengah nilai-nilai untuk for loop tidak memerlukan tanda sisipan (dan benar-benar mencoba untuk menggunakan satu akan dianggap sebagai kesalahan sintaksis). Sebagai contoh,

for %n in (hello
bye) do echo %n

Perhatikan bahwa tidak ada ruang yang dibutuhkan setelah hello atau sebelum tinggal.

8
Mohammed Safwat