Bir cmd dosyasında% ve %% arasındaki fark nedir?


88

Yakın zamanda bir .cmd dosyasına buna benzer bir satır ekledim:

for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"

Başlangıçta yalnızca% f kullanmıştım ve komut satırında çalıştırdığımda düzgün çalışıyordu, ancak dosya üzerinden çalıştırıldığında çalışmıyordu. %% f'ye geçtiğimde, dosyada çalıştı. Sadece farkın ne olduğunu merak ediyorum.

Yanıtlar:


138

(Daha ayrıntılı açıklama arşivlenmiş bir Microsoft KB makalesinde bulunabilir .)

Bilmeniz gereken üç şey:

  1. Yüzde işareti komut satırı parametreleri temsil etmek toplu dosyalarında kullanılır: %1, %2, ...
  2. Aralarında herhangi bir karakter bulunan yüzde iki işareti bir değişken olarak yorumlanır:

    echo %myvar%

  3. Aralarında hiçbir şey olmayan yüzde iki işareti (bir toplu iş dosyasında), bir komuttaki tek bir yüzde işareti olarak kabul edilir (bir toplu iş dosyası değil):%%f

Nedenmiş?

Örneğin, (basitleştirilmiş) komut satırınızı çalıştırırsak

FOR /f %f in ('dir /b .') DO somecommand %f

Bir toplu iş dosyasında, kural 2 yorumlamak çalışacaktı

%f in ('dir /b .') DO somecommand %

değişken olarak. Bunu önlemek için, 3. kuralı uygulamanız ve %bir saniye ile kaçmanız gerekir %:

FOR /f %%f in ('dir /b .') DO somecommand %%f

21
Bir toplu iş dosyasından değil de doğrudan bir komut isteminden çalıştırıldığında, bir FOR döngüsünde yalnızca yüzde bir işareti kullanmaktan neden kurtulabileceğime dair bir açıklama var mı? Ben DOS mirası hakkında biliyorum, ama biz olabilir şimdi bir komut satırından değişkenleri kullanın.
Alec Mev

6
Ayrıca değişkenin tek bir karakter olduğundan emin olun.
jiggunjer

1
Ya içinde% bulunan bir komutu yayınlamak istersem, örneğin: / f %% i için ('git log -1 --pretty = format: "%% H"') GIT_COMMIT = %% i
Wakan Tanka

15

DOS'ta, komut satırındaki ortam değişkenlerini, yalnızca %işareti sınırlayıcı olarak kullandıkları toplu iş dosyalarında kullanamazsınız . %Bir toplu iş dosyasında, örneğin bir echoifadede birebir işaret istiyorsanız, onu ikiye katlamanız gerekir.

Bu, komut satırında ortam değişkenlerine izin veren Windows NT'ye taşındı, ancak geriye dönük uyumluluk için yine %de bir .cmd dosyasındaki işaretlerinizi ikiye katlamanız gerekir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.