it-swarm-tr.com

Windows toplu iş dosyası aracılığıyla uzun komutları birden fazla satıra bölme

Bir toplu iş dosyasında uzun komutları birden fazla satıra nasıl bölebilirim?

637
Dan

Şale ve onu takip eden yeni satırın tamamen kaldırıldığını hatırladığınız sürece, cetvel ^ ile uzun satırları bölebilirsiniz. Öyleyse, çizgiyi kırdığınız bir boşluk olması gerekiyorsa, bir boşluk ekleyin. ( Aşağıdakilerle ilgili daha fazla. )

Örnek:

copy file1.txt file2.txt

şöyle yazılırdı:

copy file1.txt^
 file2.txt
801
Wayne

Şapka için kural:

Satır sonundaki bir şapka bir sonraki satırı ekler, eklenen satırın ilk karakteri kaçar.

Şapkayı birden çok kez kullanabilirsiniz, ancak satırın tamamı ~ 8192 karakterden uzun olamaz (Windows XP, Windows Vista ve 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

Bir sonraki karakterin kaçışını bastırmak için yeniden yönlendirme kullanabilirsiniz.

Yönlendirme, derenin hemen önünde olmalı. Ancak, şapkadan önce yönlendirilen bir merak var.

Şapkaya 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 dizgeye satır beslemeleri gömme de yapılabilir:

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ş satır başarı için önemlidir. Bu sadece gecikmeli genişleme ile çalışır, aksi halde satırın geri kalanı satır beslemesinden sonra dikkate alınmaz.

İşe yarıyor, çünkü çizgi ucundaki çizgi, sonraki çizgi beslemesini yok sayar ve bir sonraki karakter bir çizgi beslemesi olsa bile bir sonraki karakterden kaçar (satır başı her zaman bu aşamada yoksayılır).

240
jeb

(Bu temelde Wayne'in cevabı 'nun bir yeniden yazmasıdır; ancak şapka etrafındaki karışıklık giderildi. Ben bir CW olarak yayınladım. Düzenleme konusunda utangaç değilim. cevaplar, ancak tamamen yeniden yazmaları uygunsuz görünüyor.)

Şapka ile uzun satırları ayırabilirsiniz (^), sadece şapkaların ve onu izleyen yeni satırın komuttan tamamen tamamen kaldırıldığını unutmayın. boşluk gerekir (parametreler arasında olduğu gibi), boşluğu da içerdiğinizden emin olun (^'den önce veya bir sonraki satırın başında - bu ikinci seçimin bir devamı olduğunu açıkça belirtebilir).

Örnekler: (tümü Windows XP ve Windows 7'de test edilmiştir)

xcopy file1.txt file2.txt

olarak yazılabilir:

xcopy^
 file1.txt^
 file2.txt

veya

xcopy ^
file1.txt ^
file2.txt

ya da

xc^
opy ^
file1.txt ^
file2.txt

(Bu son işe yarar, çünkü xc ve ^ arasında hiçbir boşluk yoktur ve bir sonraki satırın başında boşluk yoktur. Böylece ^ ve newline'ı kaldırdığınızda, __xcopy elde edersiniz.)

Okunabilirlik ve akıl sağlığı için, sadece parametreler arasında en iyi ihtimalle kesin (boşluk eklediğinizden emin olun).

^ öğesinin bir toplu iş dosyasındaki son şeyin olmadığından olduğundan emin olun, çünkü --- olduğu gibi bununla ilgili büyük bir sorun gibi .

59
T.J. Crowder

Çoklu komutlar parantez içine alınabilir ve çok sayıda satıra yayılabilir; Böylece echo hi && echo hello gibi bir şey şöyle konulabilir:

( 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, cetvellerle (^) if koşullarının onları yalnızca bir boşluk varsa izlemekten hoşlandıklarını fark ettim:

if exist ^
14
Todd Partridge

Bununla birlikte, for döngüsü değerlerinin ortasındaki bölünmenin bir kareye ihtiyacı yoktur (ve gerçekte birini kullanmaya çalışmak bir sözdizimi hatası olarak kabul edilir). Örneğin,

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

Merhaba ya da güle güle gelmeden önce bile boşluğa gerek olmadığını unutmayın.

8
Mohammed Safwat