Dlaczego w Eksploratorze Windows możemy utworzyć folder lub plik z symbolem procentu (%), jeśli symbol procentu jest używany dla istniejących zmiennych?
13
Przejdź do Eksploratora Windows i utwórz nazwany folder / katalog %systemdrive%, %windir%lub dowolna inna istniejąca zmienna.
Otwórz wiersz polecenia i przejdź do właśnie utworzonego folderu.
Nie możesz, bo jest procent ( % ) symbole w nazwie folderu, mylące wiersz polecenia, ponieważ symbol procentu jest używany dla istniejących zmiennych.
Ucieczka z procentu ( % ) symbol z dwoma symbolami procentowymi ( %% ) nie działa, więc odpowiedź DavidPostill jest błędna:
Dlaczego w Eksploratorze Windows możemy utworzyć folder lub plik z procentem ( % ) symbol symbolu procentu jest używany dla istniejących zmiennych?
Uwaga: nie wszystkie zarezerwowane znaki dotyczą systemu plików NTFS. Na przykład za pomocą Linuksa mogę łatwo utworzyć plik o nazwie <test>. Po prostu nie można tego zrobić za pomocą funkcji zarządzania plikami Windows.
Nathan Osman
2
@NathanOsman Możesz mieć możliwość tworzenia plików z tymi nazwami z poziomu systemu Windows przy użyciu surowej notacji bezwzględnej ścieżki ( \\?\C:\USERS\DEFAULT\<test> ).
zwol
@ Zwol oh? Nie wiedziałem tego. Dobrze wiedzieć.
Nathan Osman
@ Zwol nie od a cmd muszla ... F:\test>md \\?\f:\test\<test> Składnia polecenia jest niepoprawna.
DavidPostill
@DavidPostill O czym md \\^?\f:\test\^<test^> ?
zwol
11
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: com1com2com3com4com5com6com7com8com9lpt1lpt2lpt3lpt4lpt5lpt6lpt7lpt8lpt9connulprn.
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.
Dlaczego używasz tagów klawiatury dla nazw ścieżek / poleceń? Byłoby to zarówno poprawniejsze składniowo, jak i bardziej czytelne, gdybyś użył formatowania kodu wbudowanego. Łatwiej byłoby również wpisać: backtick zamiast <kbd>.
Cody Gray
Gotowe. Myślałem, że & lt; kbd & gt; tagi & lt; / kbd & gt; miał znacznie wyraźniejszy zarys niż code blocks. Ale jeśli pojawi się takie pytanie, myślę, że powodują zamieszanie.
Jack White
2
„To symbol ucieczki powłoki poleceń” Niepoprawne. Znakiem ucieczki w cmd jest ^. % jest „znakiem, który ma specjalne znaczenie dla parametrów linii poleceń i parametrów FOR. Aby traktować procent jako zwykły znak, podwoj go”.
DavidPostill
Rzeczywiście, miałem pomieszane terminy. Teraz poprawiłem odpowiedź. Dzięki.
Jack White
Zwróć też uwagę, jak zaznaczono w mojej odpowiedzi, podwajasz tylko % w for Jeśli to for znajduje się w pliku wsadowym. Pisanie na maszynie for %%i in (*) do echo %%i w oknie wiersza polecenia powoduje błąd, podając niewłaściwy wygląd %%i.
<test>
. Po prostu nie można tego zrobić za pomocą funkcji zarządzania plikami Windows.\\?\C:\USERS\DEFAULT\<test>
).cmd
muszla ...F:\test>md \\?\f:\test\<test>
Składnia polecenia jest niepoprawna.md \\^?\f:\test\^<test^>
?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
icommand.com
)Różnica polega na:
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,
echo %windir%
produkuje dane wyjściowe:c:\windows
echo %%windir%%
produkuje dane wyjściowe:%windir%
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:Jeśli jest Nie zmienna o nazwie
test
, to następne polecenie jest równoważne z ostatnim - tworzy także katalog%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 znaczeniefor
polecenie zamiast powłoki poleceń: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)echo %windir%
produkuje dane wyjściowe:c:\windows
echo %^windir%
produkuje dane wyjściowe:%windir%
echo "%^windir%"
produkuje dane wyjściowe:"%^windir%"
(z dodatkiem^
- nie to, czego chcieliśmy)Zamiast tego polecam inne obejście:
set "p=%"
%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 wpisywaniafor
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.
źródło
<kbd>
.code blocks
. Ale jeśli pojawi się takie pytanie, myślę, że powodują zamieszanie.^
.%
jest „znakiem, który ma specjalne znaczenie dla parametrów linii poleceń i parametrów FOR. Aby traktować procent jako zwykły znak, podwoj go”.%
wfor
Jeśli tofor
znajduje się w pliku wsadowym. Pisanie na maszyniefor %%i in (*) do echo %%i
w oknie wiersza polecenia powoduje błąd, podając niewłaściwy wygląd%%i
.