DavidPostill'in cevabı harika, ancak yeni gelenleri biraz şaşırtmak olabilir. Ben tekrar ifade etmeye çalışacağım.
%ayrılmış bir karakter değil .
Komut kabuğuna özel anlamı olan bir karakterdir (aka ve )cmd.execommand.com
Fark:
- ayrılmış karakterleri hiç kullanamazsınız (ama aşağıya bakınız)
- özel ve kaçış karakterleri kullanabilirsiniz - bunları olduğu gibi yazarak yapamazsınız.
Başka bir deyişle, %adında içeren bir dosya veya klasör oluşturabilirsiniz . Doğrudan Windows Gezgini'ni kullanarak yapabilirsiniz, çünkü %orada özel bir anlamı yoktur. Komut isteminde bu dosyaları oluşturmanızı engellemek gibi bir niyet yoktu, ancak %orada özel bir anlamı olduğundan, bu dosyaları oluşturmak için aşağıda belirtilen sözdizimini kullanmanız gerekir.
BAT-files
Eğer varsa bir toplu iş dosyası yazma (komut istemi uygulamaya aka) komutu kabuk tarafından idam (* .bat, * .cmd), kullanmak için %bir dosya oluşturmak için (örneğin anlamıyla %yerine adına değil, Bir değişken veya parametre) %%yerine yazmanız gerekir .
Örneğin,
- komutu
echo %windir%çıktı üretir:c:\windows
- ancak, komut
echo %%windir%%çıktı üretir:%windir%
- ve benzeri: komut
echo %%%%windir%%%%çıktı üretir:%%windir%%
Dolayısıyla, aşağıdaki satırı olduğu gibi kaydeder test.batve çalıştırırsanız, %test%yüzde işaretleriyle tamamlanmış bir dizin oluşturur :
md %%test%%
Yoksa hiçbir adlandırılmış değişken testaynı zamanda bir dizin oluşturur - bu bir sonraki komutu sonuncusu eşdeğerdir %test%:
md %test%
... ama lütfen böyle yapmayın, çünkü emriniz, biri bu isimde bir değişken yarattıktan sonra istediğiniz şekilde davranmaz.
forBir BAT dosyasında komut kullanmayı düşünüyorsanız , komut kabuğunun kendisi için komut yerine %özel bir anlamı olacak şekilde ikiye katlamanız gerekir for:
for %%i in (*.*) do echo %%i
Bu, geçerli dizindeki dosyaların bir listesini (yani, %%iözel bir anlamı vardır) üretecektir ve bir sonraki bölümde açıklanan geçici çözümü %%ikullanmadan nasıl hazır hale getireceğinden emin değilim %p%( %%%%iburada çalışmaz).
%komut isteminde özel anlamı olan tek karakter değil. Diğerleri şunlardır ^, <, >, |, (, ), &, !, ". Bunların çoğu (dışlama ") kaçılabilir - yani, bir kaçış ^karakteriyle önceden eklenir, böylece gerçek bir karakter eklenir, bu da özel anlamını bastırır. Bunlar da kendi özel fonksiyon içindeki dize doublequoted ve kaybedecek "yerde ters eğik çizgi edilir: \". Bazı satırlar ( ^) çift tırnaklı sicimin içinde ve gecikmiş değişken sübstitüsyonunun gerçekleştiği yerde iki katına çıkması gerekebilir ( !özel anlam).
Komut istemi
Ne yazık ki, komutları doğrudan komut istemi penceresine yazarken, %karakterin iki katına çıkması sadece ürettiği %%örn. Yukarıdaki yaklaşım bu durumda çalışmaz.
Komut işlemede bir tuhaflıktan faydalanan bir geçici çözüm var gibi görünüyor - sonra %yazarak değişmez alabilirsiniz . Ancak bu yaklaşım kusursuz değildir: dosya adınız çift tırnak işareti içine alınmışsa, tam anlamıyla yorumlanır (ve tırnak işaretleri olmadan kaldırılmaz)^%^
- komutu
echo %windir%çıktı üretir:c:\windows
- komutu
echo %^windir%çıktı üretir:%windir%
- komutu
echo "%^windir%"çıktı üretir: "%^windir%"(fazladan ^- istediğimiz şeyi değil)
Bunun yerine başka bir geçici çözüm öneririm:
- bunun gibi bir değişken oluşturun:
set "p=%"
%p%değişmez yüzde işaretine ihtiyacınız olan her yerde kullanın : echo "%p%windir%p%"şimdi çıktı üretecek:"%windir%"
Aynı geçici çözüm, tam yüzde oturum açma forkomutunu almak için de kullanılabilir ; ancak, BAT-dosyalarının aksine, fordoğrudan komutu girerken, yüzde işaretlerinin iki katına çıkmadığını unutmayın .
Dosya sistemi ayrılmış karakterler
Normalde adında aşağıdaki ayrılmış karakterleri içeren bir dosya veya dizin oluşturamazsınız: / ? < > \ : * | "NULL sembolü ve 1 ila 31 kodlu karakterler; ayrıca .ve boşluk son karakter olamaz; ve aşağıdaki isimler yasadışıdır: com1 com2 com3 com4 com5 com6 com7 com8 com9 lpt1 lpt2 lpt3 lpt4 lpt5 lpt6 lpt7 lpt8 lpt9 con nul prn.
Ancak, bazı bu kısıtlamaların ile dosya yolunu önek atlanabilir \\?\böyle: \\?\c:\test...\nul. En azından ayrılmış isimler ve boşluk ve nokta ile biten dosyalar bu şekilde değiştirilebilir.
Dahası, NTFS dosya sisteminin kendisi çeşitli adlandırma alt sistemlerini de destekler: DOS, Windows ve POSIX. Yukarıdaki tüm kısıtlamalara sahip Windows alt sistemidir, POSIX ise sadece /NULL-sembolü yasaklar .
GNU / Linux işletim sistemi (bir POSIX üst kümesi) böylece normal Windows API işlevlerinin (ve dolayısıyla windows programlarının) çalışamadığı dosya / dizin adları oluşturabilir (ve silebilir). Windows XP'de onlarla çalışmak ücretsiz "Services For Unix alt sistemi" (SFU) kurarak mümkündü; Vista ve üzeri üçüncü parti araçlar bunun için gereklidir. Yeni ubuntu-on-windows10 alt sisteminin yapabileceğinden emin değilim.
<test>. Sadece Windows dosya yönetimi fonksiyonları kullanılarak yapılamaz.