Odpowiedź DavidPostill jest świetna, ale może trochę zmylić przybyszów. Spróbuję przeformułować.
% nie jest zarezerwowany postać.
To jest postać z specjalne znaczenie do powłoka polecenia (znany jako cmd.exe i command.com )
Różnica polega na:
- nie można w ogóle używać znaków zastrzeżonych (ale patrz poniżej)
- możesz używać specjalnych i uciekających znaków - po prostu nie wpisuj ich tak jak są
Innymi słowy, możesz utworzyć plik lub folder zawierający % w ich imieniu. Możesz to zrobić bezpośrednio za pomocą Eksploratora Windows, ponieważ % nie ma tam specjalnego znaczenia. Nie było też zamiaru uniemożliwić tworzenia takich plików w wierszu polecenia, ale ponieważ % ma tam specjalne znaczenie, musisz użyć składni opisanej poniżej, aby utworzyć takie pliki.
Pliki BAT
Jeśli jesteś pisanie pliku wsadowego ( % dosłownie (na przykład, aby utworzyć plik za pomocą % w nazwie, a nie do zastąpienia zmiennej lub parametru), musisz wpisać %% zamiast.
Na przykład,
- dowództwo
echo %windir% produkuje dane wyjściowe: c:\windows
- jednak polecenie
echo %%windir%% produkuje dane wyjściowe: %windir%
- i tak dalej: polecenie
echo %%%%windir%%%% produkuje dane wyjściowe: %%windir%%
Więc jeśli zapisujesz następującą linię jako test.bat i uruchom go, utworzy katalog o nazwie %test% wraz ze znakami procentu:
md %%test%%
Jeśli jest Nie zmienna o nazwie test, to następne polecenie jest równoważne z ostatnim - tworzy także katalog %test%:
md %test%
... ale proszę nigdy tego nie robić, ponieważ twoje polecenie nie zachowuje się tak, jak chciałeś, gdy ktoś stworzy zmienną o tej nazwie
Jeśli zamierzasz użyć polecenia for w pliku BAT musisz także podwoić % tak, aby miało to szczególne znaczenie for polecenie zamiast powłoki poleceń:
for %%i in (*.*) do echo %%i
Spowoduje to utworzenie listy plików w bieżącym katalogu (czyli %%i ma specjalne znaczenie) i nie jestem pewien, jak to zrobić, aby było dosłowne %%i bez uciekania się do %p% obejście opisane w następnej sekcji ( %%%%i nie działa tutaj).
% nie jest jedynym znakiem o specjalnym znaczeniu w wierszu polecenia. Inne obejmują ^, <, >, |, (, ), &, !, ". Większość z nich (wyłączając " ) może być uciekł - czyli poprzedzony znakiem ucieczki ^ tak, aby wstawić literalny znak, tłumiąc jego specjalne znaczenie. Te także tracą swoją specjalną funkcję w ciągu podwójnego ciągu i " ucieka z ukośnikiem odwrotnym: \". Trochę opieki ( ^ ) może wymagać podwojenia wewnątrz ciągu zamkniętego z podwójnymi cytatami i gdzie ma miejsce podstawienie zmiennej opóźnionej ( ! specjalne znaczenie).
Wiersz polecenia
Niestety, podczas wpisywania poleceń bezpośrednio w oknie wiersza polecenia, podwajanie % postać po prostu produkuje %% tj. powyższe podejście nie działa w tym przypadku.
Wydaje się, że istnieje obejście wykorzystujące dziwactwo w przetwarzaniu poleceń - można uzyskać dosłowne % wpisując ^ po %. Takie podejście nie jest jednak niezawodne: jeśli nazwa pliku jest ujęta w podwójne cudzysłowy, ^ jest interpretowane dosłownie (i nie jest usuwane jak bez cudzysłowów)
- dowództwo
echo %windir% produkuje dane wyjściowe: c:\windows
- dowództwo
echo %^windir% produkuje dane wyjściowe: %windir%
- dowództwo
echo "%^windir%" produkuje dane wyjściowe: "%^windir%" (z dodatkiem ^ - nie to, czego chcieliśmy)
Zamiast tego polecam inne obejście:
- utwórz zmienną taką jak ta:
set "p=%"
- posługiwać się
%p% gdziekolwiek potrzebujesz dosłownego znaku procentu: echo "%p%windir%p%" będzie teraz produkować dane wyjściowe: "%windir%"
To samo obejście może zostać wykorzystane do uzyskania dosłownego procentowego zalogowania for polecenie, jednak należy pamiętać, że w przeciwieństwie do plików BAT podczas wpisywania for polecenie bezpośrednio zrobić nie podwójne znaki procentu.
Zastrzeżone znaki systemu plików
Zwykle nie można utworzyć pliku lub katalogu zawierającego następujące zastrzeżone znaki w nazwie: / ? < > \ : * | ", Symbol NULL i znaki z kodami od 1 do 31; również . i przestrzeń nie może być ostatnimi postaciami; i następujące imiona są nielegalne: com1 com2 com3 com4 com5 com6 com7 com8 com9 lpt1 lpt2 lpt3 lpt4 lpt5 lpt6 lpt7 lpt8 lpt9 con nul prn.
Jednak, trochę z tych ograniczeń można ominąć ścieżkę pliku poprzedzającego \\?\ lubię to: \\?\c:\test...\nul. W ten sposób można manipulować przynajmniej plikami z nazwami zastrzeżonymi i kończącymi się spacją i kropką.
Co więcej, sam system plików NTFS obsługuje kilka podsystemów nazewnictwa: DOS, Windows i POSIX. Jest to podsystem Windows, który ma wszystkie powyższe ograniczenia, podczas gdy POSIX zabrania tylko / i symbol NULL.
GNU / Linux OS (nadzbiór POSIX) może zatem tworzyć (i usuwać) nazwy plików / katalogów, z którymi większość normalnych funkcji Windows API (a zatem i programów Windows) nie może pracować. W systemie Windows XP praca z nimi była możliwa dzięki zainstalowaniu bezpłatnego „Usługi dla podsystemu Unix” (SFU); w systemie Vista i wyżej wymagane są do tego narzędzia innych firm. Nie jestem pewien, czy może to zrobić nowy podsystem ubuntu-on-windows10.
<test>. Po prostu nie można tego zrobić za pomocą funkcji zarządzania plikami Windows.