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.