Windows Gezgini'nde, yüzde simgesi mevcut değişkenler için kullanılıyorsa neden yüzde (%) sembolüyle bir klasör veya dosya oluşturabiliriz?


13
  1. Windows Gezgini gidin ve adında bir klasör / dizin oluşturmak %systemdrive%, %windir%ya da herhangi bir diğer mevcut değişken.
  2. Bir komut istemi açın ve az önce oluşturduğunuz klasöre gidin.

Yapamazsınız, çünkü %klasör adında yüzdelik ( ) simgeler vardır, komut istemi karıştırılır, çünkü yüzde simgesi mevcut değişkenler için kullanılır.

Yüzde %iki ( ) sembolüyle yüzde ( ) sembolünden kaçmak ( ) %%işe yaramaz, bu nedenle DavidPostill'in cevabı yanlıştır:

Explorer masaüstünün biraz gösterdiği komut istemi penceresi Öyleyse, Windows Gezgini'nde, %yüzde simgesi mevcut değişkenler için kullanılıyorsa neden yüzdelik ( ) sembolüyle bir klasör veya dosya oluşturabiliriz ?

Yanıtlar:


15

Neden yüzde sembolüyle bir klasör / dosya oluşturabiliriz?

%Karakter bir dosya adı ayrılmış bir karakter değildir.

Dosyaları, yolları ve ad alanlarını adlandırmak için ayrılmış karakterler şunlardır:

< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)

Kaynak Dosyalarını, Yollarını ve Ad Alanlarını Adlandırma


Yüzde sembolü değişkenler için ayrılmıştır.

Şimdi bir komut istemi açın ve oluşturduğunuz klasöre gitmeyi deneyin.

Bunu yapamazsınız, çünkü klasör adında değişken olduğunu gösteren yüzde sembolleri vardır.

Yukarıdaki doğru değil. Her şey beklediğiniz gibi çalışır.

Örnek kullanarak %test%:

F:\test>echo %test%
%test%

F:\test>md %test%

F:\test>cd %test%

F:\test\%test%>

Örnek kullanarak %systemdrive%:

F:\test>echo %systemdrive%
C:

F:\test>md %systemdrive%
A subdirectory or file C: already exists.

F:\test>cd %systemdrive%
C:\Users\DavidPostill

F:\test>c:

C:\Users\DavidPostill>f:

F:\test>

F:\test>dir %systemdrive%
 Volume in drive C has no label.
 Volume Serial Number is C8D0-DF1E

 Directory of C:\Users\DavidPostill

03/06/2016  16:16    <DIR>          .
03/06/2016  16:16    <DIR>          ..
18/07/2015  19:25    <DIR>          .atom
03/06/2016  16:16    <DIR>          .oracle_jre_usage
08/05/2015  20:29    <DIR>          Contacts
03/06/2016  16:14    <DIR>          Desktop
01/06/2016  09:04    <DIR>          Documents
02/05/2016  12:55    <DIR>          Downloads
09/01/2015  11:51    <DIR>          dwhelper
08/05/2015  20:29    <DIR>          Favorites
20/02/2016  22:00    <DIR>          Jaikoz
08/05/2015  20:29    <DIR>          Links
17/03/2015  06:19    <DIR>          Music
29/03/2016  19:01    <DIR>          Pictures
08/05/2015  20:29    <DIR>          Saved Games
23/06/2016  10:55    <DIR>          Searches
02/05/2016  12:36    <DIR>          SecurityScans
11/04/2016  12:14               994 Start Menu - Shortcut.lnk
31/05/2016  00:52    <DIR>          temp
17/03/2015  06:19    <DIR>          Videos
               1 File(s)            994 bytes
              19 Dir(s)  69,716,357,120 bytes free

Kaçan Yüzdeler

%Karakter komut satırı parametreleri ve özel bir anlamı vardır FORparametreler.

Yüzdeyi normal bir karakter olarak ele almak için ikiye katlayın:

%%

Kaynak sözdizimi


Daha fazla okuma


1
Not: ayrılmış karakterlerin tümü NTFS dosya sistemine uygulanmaz. Örneğin, Linux kullanarak kolayca adlandırılmış bir dosya oluşturabilirim <test>. Sadece Windows dosya yönetimi fonksiyonları kullanılarak yapılamaz.
Nathan Osman,

2
@NathanOsman Bu adlara sahip dosyaları Windows içinden ham mutlak yol notasyonu ( \\?\C:\USERS\DEFAULT\<test>) kullanarak oluşturabilirsiniz .
zwol

@zwol oh? Bunu bilmiyordum. Bunu bilmek güzel.
Nathan Osman,

@zwol Kabuktan değil cmd... F:\test>md \\?\f:\test\<test> Komutun sözdizimi hatalı.
DavidPostill

@DavidPostill Peki ya md \\^?\f:\test\^<test^>?
zwol

11

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.


Yol / komut adları için neden klavye etiketlerini kullanıyorsunuz? Satır içi kod biçimlendirmesini kullandıysanız, sözdizimsel olarak daha doğru ve daha okunaklı olurdu. Ayrıca yazmak daha kolay olurdu: bunun yerine bir geri dönüş tuşu <kbd>.
Cody Gray,

yapılır. <kbd> etiketlerinin </kbd> öğesinin olduğundan daha net bir taslak olduğunu düşündüm code blocks. Ama böyle bir soru ortaya çıkarsa, sanırım karışıklığa neden olurlar.
Jack White,

2
"Bu komut kabuğunun bir kaçış sembolüdür" Doğru değil. Cmd cinsinden kaçış karakteri ^. %"komut satırı parametreleri ve FOR parametreleri için özel bir anlamı olan bir karakterdir. Yüzdeyi normal bir karakter olarak değerlendirmek için" ikiye katlayın.
DavidPostill

Aslında, terimleri karıştırdım. Şimdi cevap düzeltildi. Teşekkürler.
Jack White,

Cevabım belirtilen Ayrıca, unutmayın sadece çift %de foreğer forbir toplu iş dosyası içinde olduğunu. for %%i in (*) do echo %%iBir komut propmt penceresine yazarak , onaylanmamış bir görünümüne atıfta bulunarak bir hata üretir %%i.
Jack White,
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.