Szukając rozwiązania do drukowania ścieżek w path
zmiennej w wierszu poleceń systemu Windows, przyszedłem do tego rozwiązania. odpowiedzią jest to polecenie:
echo %path:;=&echo.%
teraz zastanawiam się, jak to działa.
windows
command-line
yekanchi
źródło
źródło
echo.
może nie działać .Odpowiedzi:
To ciekawe rozwiązanie, którego nigdy wcześniej nie widziałem. Pozwól mi spróbować wyjaśnić:
echo %path%
. Spowoduje to wydrukowanie wszystkich katalogów w jednym wierszu oddzielonym średnikami (;
)%path:a=b%
który zastąpi wszystkiea
znakib
echo.
służy do drukowania nowego wiersza&
służy do oddzielania poleceń, np.echo line1&echo line2
wypisze dwie linie;
nic, a następnie wydrukuj nowy wiersz”. Nie mogę znaleźć żadnej dokumentacji na ten temat, więc to tylko moja interpretacja. Szczerze mówiąc, nawet nie wiedziałem, że to możliwe, ale proszę bardzo. AKTUALIZACJA Moja interpretacja tego kroku wydaje się być zła i lepiej wyjaśniona przez wizzwizz4 .źródło
echo path
? są używane %% dla zmiennych?set greeting=Hello
a następnieecho %greeting%
. MylącoPATH
zdarza się, że jest zarówno poleceniem, jak i zmienną, więc wpisanie poleceniapath
lubecho %path%
będzie miało taki sam wynik.$PATH
na przykład.echo.
nie jest „poleceniem wypisania nowego wiersza”. Jest to interpreter poleceń Microsoft dla Windows NTcmd
; aecho.
jest to po prostu polecenie drukowania elementu ścieżki, zapewniające, że jeśli element ścieżki jest pusty, nie przełącza się na inną funkcjonalnośćecho
. Pierwszy teżecho
powinien byćecho.
.Jest to oparte na podstawianiu zmiennych w wierszu poleceń.
%path:;=&echo.%
oznacza „%path%
, ale zamień wszystkie;
s na&echo.
”. Oznacza to, że przyset path=C:\Windows\System32;C:\Windows\;;C:\Python37;
:staje się:
Ponieważ
&
jest to separator poleceń, jest to równoważne z:Ze względu na dziwactwa DOS Batch,
echo.
jest identyczny, zecho
wyjątkiem sytuacji, gdy nic po nim nie ma. W takim przypadku po prostu nic nie drukuje, zamiast mówić, czyECHO
jest włączony, czy wyłączony. Spowoduje to, że wynik:Naprawdę, należy wziąć
echo.%path:;=&echo.%
pod uwagę przypadek, w którym%PATH%
zaczyna się od;
, ale to polecenie i tak jest całkiem sprytne.Wchodząc w szczegółowe detale, naprawdę
echo(
powinno się go używaćecho.
. Jest tak, ponieważecho.
może mieć problemy, gdy plik ma nazwęecho
, i jest powolny, ponieważ musi sprawdzać dysk (%CD%
i myślę, że cały%PATH%
) za każdym razem, gdy jest uruchamiany. (Nie mam kopii systemu Windows, więc nie mogę jej sam sprawdzić; czy to tylko%CD%
czy gdziekolwiek,%PATH%
żeecho
wpłynie to na obecność plikuecho.
i co on robi?)źródło
echo)
, ale tak naprawdę nie pamiętam. ;-(echo.
to ten, który ludzie krążyli najwięcej lat temu. Jest to jeden z wielu książek. Wydajność nie jest problemem. Dziwne zachowanie, gdy zdarzają się różne pliki, jest. Kiedy napisałem 32-bitowy zamiennik 16-bitowegocmd
w OS / 2, łamanie nazw poleceń w tych znakach interpunkcyjnych i to bardzo nieregularne zachowanie podczas analizowania jest jedną z rzeczy, których celowo nie powielałem, i które nałożyłem na udokumentowane lista różnic.echodot
Zamiast tego wykonałem polecenie zewnętrzne , które można było aliasowaćecho.
według potrzeb.echo(
jest jedyną bezpieczną wersją.