Bagaimana saya bisa membagi perintah panjang ke beberapa baris dalam file batch?
Bagaimana saya bisa membagi perintah panjang ke beberapa baris dalam file batch?
Jawaban:
Anda dapat memecah garis panjang dengan tanda sisipan ^
selama Anda ingat bahwa tanda tanda pada tanda kuret dan baris baru yang ada di dalamnya benar-benar dihapus. Jadi, jika harus ada ruang di mana Anda melanggar garis, sertakan ruang. ( Lebih lanjut tentang itu di bawah ini. )
Contoh:
copy file1.txt file2.txt
akan ditulis sebagai:
copy file1.txt^
file2.txt
echo
ed.
co^␍py ^␍file1 ^␍file2
. Saya sarankan Anda menghapus komentar Anda untuk menghindari kebingungan, terutama karena pencarian ini sangat populer
Aturan untuk caret adalah:
Tanda sisipan di akhir baris, tambahkan baris berikutnya, karakter pertama dari baris yang 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 tersebut 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 memungkinkan untuk menyematkan umpan baris 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
Garis kosong itu 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).
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
tidak berfungsi! Saya harus menambahkan spasi: copy ^[newline] "file1.txt" ^[newline] "file2.txt"
.
(Ini pada dasarnya adalah penulisan ulang jawaban Wayne tetapi dengan kebingungan di sekitar tanda sisir menjadi jelas. Jadi saya telah mempostingnya sebagai CW. Saya tidak malu mengedit jawaban, tetapi sepenuhnya menulis ulang sepertinya tidak pantas.)
Anda dapat memecah garis-garis panjang dengan tanda sisipan ( ^
), hanya ingat bahwa tanda sisipan dan baris baru yang mengikutinya dihapus seluruhnya dari perintah, jadi jika Anda meletakkannya di tempat spasi akan diperlukan (seperti antara parameter), pastikan untuk memasukkan ruang 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 xc
dan dan ^
, dan tidak ada spasi di awal baris berikutnya. Jadi, ketika Anda menghapus ^
dan baris baru, Anda mendapatkan .... xcopy
)
Untuk keterbacaan dan kewarasan, mungkin lebih baik melanggar hanya antara parameter (pastikan untuk memasukkan spasi).
Pastikan bahwa ^
adalah tidak hal terakhir dalam sebuah file batch, karena ada tampaknya menjadi masalah besar dengan itu .
Berbagai perintah dapat dimasukkan dalam tanda kurung dan tersebar di berbagai baris; jadi sesuatu seperti echo hi && echo hello
bisa 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 caret ( ^
) bahwa if
conditional menyukai mereka untuk mengikuti hanya jika ada ruang:
if exist ^
cmd1.bat && cmd2.bat
berbeda dari bentuk parens: mengeksekusi cmd2.bat
iff cmd1.bat
dieksekusi berhasil (-tanpa pengaturan %errorcode%
). Bentuk terakhir dijalankan tanpa syarat. Agak tak terduga (setidaknya bagi saya) adalah bahwa, jelas, Anda tidak dapat menggunakan kombinasi keduanya yaitu menambahkan &&
sebelum jeda baris.
( echo <line break here> hello )
menghasilkan baris kosong.
Namun tampaknya membelah di tengah-tengah nilai-nilai untuk loop tidak perlu 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.
for
sintaksis: pemisah elemen dalam "untuk-set" adalah ruang, koma, titik koma, tanda sama, karakter TAB dan baris baru.
do
bagian itu berisi if-else
pernyataan banyak / bertumpuk ?
^
dan setelah teks perintah Anda.