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.exe
command.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.bat
ve ç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 test
aynı 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.
for
Bir 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ü %%i
kullanmadan nasıl hazır hale getireceğinden emin değilim %p%
( %%%%i
burada ç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 for
komutunu almak için de kullanılabilir ; ancak, BAT-dosyalarının aksine, for
doğ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.