2013-01-24 16 views
54

Geçenlerde bir .cmd dosyasında buna benzer bir satır dahil:bir cmd dosyası ve% %% arasındaki fark nedir?

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

Başlangıçta sadece kullanmıştı% f ve dosyası üzerinden çalıştırdığınızda komut satırında çalıştırdığınızda iyi çalışır, ancak olmaz . %% f'ye geçtiğimde dosyada çalıştı. Sadece farkın ne olduğunu merak ediyorum.

cevap

86

(. Daha detaylı olarak açıklanması this Microsoft kb bulunabilir)

Üç şey bilmek: %2%1:

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


Neden var:

echo %myvar%

  • İki yüzde işaretleri (bir toplu iş dosyasında) arasında şey olmadan bir komuta tek bir yüzde işareti (bir toplu iş dosyası) gibi davranılır o?

    Örneğin, sizin (basitleştirilmiş) komut satırını bir toplu dosyasında

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

    , kural yürütmek eğer 2 bir değişken olarak

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

    yorumlamak çalışacaktı. Bunu önlemek için, bir ikinci % ile %kural 3 uygulamak ve kaçmaya vardır:

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

    Ben döngü İÇİN bir sadece bir yüzde işareti kullanarak paçayı neden bir açıklaması var mıdır, Doğrudan bir komut isteminden çalıştırıldığında ve bir toplu iş dosyasından değilken mi? Ben DOS mirası hakkında biliyorum, ama biz ** ** şimdi bir komut satırından değişkenleri kullanabilirsiniz. –

    +3

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

    10

    DOS size sadece onlar ayırıcı olarak % işareti kullanılan toplu iş dosyaları, içinde, komut satırında ortam değişkenleri kullanamadı. Eğer bir toplu iş dosyasında bir hazır % işareti istiyorsa, mesela Bir echo açıklamada, bunu iki katına gerekiyordu.

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

    İlgili konular