Bir toplu iş dosyasında uzun komutları birden çok satıra nasıl bölebilirim?
Bir toplu iş dosyasında uzun komutları birden çok satıra nasıl bölebilirim?
Yanıtlar:
^
Düzeltme işareti ve takip eden satırın tamamen kaldırıldığını hatırladığınız sürece düzeltme işareti ile uzun satırları ayırabilirsiniz . Yani, çizgiyi kırdığınız bir boşluk varsa, bir boşluk ekleyin. ( Aşağıda daha fazlası. )
Misal:
copy file1.txt file2.txt
şöyle yazılır:
copy file1.txt^
file2.txt
echo
.
co^␍py ^␍file1 ^␍file2
. Karışıklığı önlemek için yorumunuzu silmenizi öneririm, özellikle de bu görev çok popüler olduğu için
Caret kuralı:
Satır ucundaki bir düzeltme işareti, bir sonraki satıra eklenir, eklenen satırın ilk karakteri kaçacaktır.
Düzeltmeyi birden çok kez kullanabilirsiniz, ancak tüm satır en fazla ~ 8192 karakter uzunluğunu (Windows XP, Windows Vista ve Windows 7) aşmamalıdır.
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
Bir sonraki karakterin kaçmasını bastırmak için bir yönlendirme kullanabilirsiniz.
Yönlendirme caret'in hemen önünde olmalıdır. Ancak, düzeltme işaretinden önce yeniden yönlendirmeyle ilgili bir merak var.
Düzeltme çubuğuna bir belirteç yerleştirirseniz belirteç kaldırılır.
echo Test5
echo one <nul ^
& echo two
--- Output ---
Test5
one
two
echo Test6
echo one <nul ThisTokenIsLost^
& echo two
--- Output ---
Test6
one
two
Ayrıca, satır beslemelerini dizeye gömmek de mümkündür :
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
Boş çizgi başarı için önemlidir. Bu sadece gecikmeli genişleme ile çalışır, aksi takdirde hattın geri kalanı hat beslemesinden sonra yok sayılır.
Satır ucundaki düzeltme işareti bir sonraki satır beslemesini yok sayar ve sonraki karakter aynı zamanda satır besleme olsa bile sonraki karakterden kaçar (satır başları bu aşamada her zaman yoksayılır).
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
bu çalışmaz : çalışmıyor! Bir boşluk eklemem gerekiyordu copy ^[newline] "file1.txt" ^[newline] "file2.txt"
.
(Bu temelde Wayne'in cevabının yeniden yazılmasıdır, ancak caret etrafındaki karışıklık giderildi. Bu yüzden CW olarak yayınladım. Cevapları düzenlemekten utanmıyorum, ancak tamamen yeniden yazmak uygunsuz görünüyor.)
Caret ( ^
) ile uzun satırları ayırabilirsiniz , sadece caret ve onu izleyen satırsonunun komuttan tamamen kaldırıldığını unutmayın , bu nedenle boşluk bırakılması gereken yere koyarsanız (parametreler arasında), alanı da dahil etmek için (bir ^
sonraki satırın başlangıcından önce ya da başında - bu ikinci seçim, bir devamıdır).
Örnekler: (tümü Windows XP ve Windows 7'de test edilmiştir)
xcopy file1.txt file2.txt
şu şekilde yazılabilir:
xcopy^
file1.txt^
file2.txt
veya
xcopy ^
file1.txt ^
file2.txt
ya da
xc^
opy ^
file1.txt ^
file2.txt
(Son eserler That betwen boşluk olmadığından dolayı xc
ve ^
bir sonraki satırın başına ve hiçbir boşluk. Yani kaldırdığınızda ^
ve yeni satır elde edersiniz ... xcopy
.)
Okunabilirlik ve akıl sağlığı için, muhtemelen en iyi ihtimalle sadece parametreler arasında kırılır (boşluğu eklediğinizden emin olun).
Emin olun ^
olduğu değil orada şekilde Toplu dosyasındaki son şey bu büyük bir sorun olarak görünmektedir .
Çoklu komutlar parantez içine alınabilir ve çok sayıda satıra yayılabilir; böyle bir şey echo hi && echo hello
şu şekilde konabilir:
( echo hi
echo hello )
Ayrıca değişkenler yardımcı olabilir:
set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE"
if exist %AFILEPATH% (
start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING...
) else (
...
Ayrıca koşulların sadece bir boşluk varsa onları takip etmeyi sevdiğini carets ( ^
) ile fark ettim if
:
if exist ^
cmd1.bat && cmd2.bat
parens formundan farklı: execute cmd2.bat
iff cmd1.bat
başarıyla yürütüldü (-ayarı olmadan %errorcode%
). İkinci form koşulsuz olarak yürütülür. Biraz beklenmedik (en azından benim için), açıkça, &&
satır sonundan önce her iki + ifadesini de kullanamazsınız .
( echo <line break here> hello )
boş bir satıra neden olur.
Bununla birlikte, bir for döngüsünün değerlerinin ortasında bölünmenin bir düzeltme gerektirmez (ve aslında birini kullanmaya çalışmak bir sözdizimi hatası olarak kabul edilir). Örneğin,
for %n in (hello
bye) do echo %n
Merhabadan sonra veya hoşçakaldan önce yer bile gerekmediğini unutmayın.
for
sözdiziminin bir parçasıdır : "for-set" içindeki elemanların ayırıcıları boşluk, virgül, noktalı virgül, eşittir işareti, SEKME karakteri ve yeni satırlardır.
do
bölüm birden fazla / iç içe if-else
ifadeler içeriyorsa ?
^
Komut metninizden hemen önce ve sonra boşluk eklerseniz sonraki satırı boşluk bırakmadan başlatabilirsiniz .