Co oznacza % ~ d0 w pliku wsadowym systemu Windows?
Patrzę na plik wsadowy, który definiuje następujące zmienne:
set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
- co właściwie oznacza
%~d0
lub%~p0
? - czy istnieje zestaw znanych wartości takich jak bieżący katalog, dysk, parametry skryptu?
- czy są jakieś inne podobne skróty, których mógłbym użyć?
9 answers
Magiczne zmienne %
n zawiera argumenty użyte do wywołania pliku: %0
jest ścieżką do samego pliku bat, {[2] } jest pierwszym argumentem po, %2
jest drugim i tak dalej.
Ponieważ argumenty są często ścieżkami plików, istnieje dodatkowa składnia do wyodrębniania części ścieżki. ~d
to napęd, {[5] } to ścieżka (bez napędu), {[6] } to nazwa pliku. Można je łączyć tak, że ~dp
to napęd+ścieżka.
%~dp0
jest więc całkiem przydatna w nietoperzu: to jest folderem, w którym znajduje się wykonujący plik bat.
Możesz również uzyskać inne meta informacje o pliku: ~t
to znacznik czasu, ~z
to Rozmiar.
Spójrz tutaj dla odniesienia dla wszystkich poleceń wiersza poleceń. Kody magii tyldy są opisane w dla .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 21:27:18
Są to wzmocnione substytucje zmiennych. Modyfikują zmienne % N używane w plikach wsadowych. Bardzo przydatne, jeśli jesteś do programowania wsadowego w systemie Windows.
%~I - expands %I removing any surrounding quotes ("")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
%~sI - expanded path contains short names only
%~aI - expands %I to file attributes of file
%~tI - expands %I to date/time of file
%~zI - expands %I to size of file
%~$PATH:I - searches the directories listed in the PATH
environment variable and expands %I to the
fully qualified name of the first one found.
If the environment variable name is not
defined or the file is not found by the
search, then this modifier expands to the
empty string
Możesz znaleźć powyższe, uruchamiając FOR /?
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-14 00:12:12
Tak, istnieją inne skróty, które można użyć, które są podane poniżej. W poleceniu ~d0 oznaczałoby literę napędu argumentu 0.
~ expands the given variable
d gets the drive letter only
0 is the argument you are referencing
Ponieważ 0-ty argument jest ścieżką skryptu, otrzymuje on za Ciebie literę dysku ścieżki. Możesz również użyć następujących skrótów.
%~1 - expands %1 removing any surrounding quotes (")
%~f1 - expands %1 to a fully qualified path name
%~d1 - expands %1 to a drive letter only
%~p1 - expands %1 to a path only
%~n1 - expands %1 to a file name only
%~x1 - expands %1 to a file extension only
%~s1 - expanded path contains short names only
%~a1 - expands %1 to file attributes
%~t1 - expands %1 to date/time of file
%~z1 - expands %1 to size of file
%~$PATH:1 - searches the directories listed in the PATH
environment variable and expands %1 to the fully
qualified name of the first one found. If the
environment variable name is not defined or the
file is not found by the search, then this
modifier expands to the empty string
%~dp1 - expands %1 to a drive letter and path only
%~nx1 - expands %1 to a file name and extension only
%~dp$PATH:1 - searches the directories listed in the PATH
environment variable for %1 and expands to the
drive letter and path of the first one found.
%~ftza1 - expands %1 to a DIR like output line
Można to również znaleźć bezpośrednio w wierszu polecenia po uruchomieniu wywołania /? czy dla /?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-18 20:49:21
Od parsowanie nazw plików w pliku wsadowym i więcej idiomów-Real ' s How-to:
Ścieżka (bez napędu) gdzie znajduje się skrypt: ~p0
Dysk, w którym znajduje się skrypt: ~d0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-28 10:15:43
Kolejną wskazówką, która bardzo by pomogła jest to, że aby ustawić bieżący katalog na inny dysk trzeba by użyć %~d0
najpierw, potem cd %~dp0
. Spowoduje to zmianę katalogu na dysk pliku wsadowego, a następnie zmianę na jego folder.
Dla # onelinerovers, cd /d %~dp0
zmieni zarówno dysk jak i katalog :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-23 09:27:06
%~d0
podaje literę napędu argumentu 0 (nazwę skryptu), %~p0
ścieżkę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 20:44:20
Niektóre gotchas uważać na:
Jeśli klikniesz dwukrotnie plik wsadowy %0
zostanie otoczony cudzysłowami. Na przykład, jeśli zapiszesz ten plik jako c:\test.bat
:
@echo %0
@pause
Podwójne kliknięcie otworzy nowy wiersz polecenia z wyjściem:
"C:\test.bat"
Ale jeśli najpierw otworzysz wiersz polecenia i wywołasz go bezpośrednio z tego wiersza polecenia, %0
będzie odnosić się do tego, co wpisałeś . Jeśli wpiszesz test.bat
wpisz , wyjście %0
nie będzie miało cytaty, ponieważ nie wpisałeś żadnych cytatów:
c:\>test.bat
test.bat
Jeśli wpiszesz test
wpisz , wyjście %0
również nie będzie miało rozszerzenia, ponieważ wpisałeś brak rozszerzenia:
c:\>test
test
To samo dla tEsT
wpisz :
c:\>tEsT
tEsT
Jeśli wpiszesz "test"
wpisz , wyjście %0
będzie miało cudzysłowy (ponieważ je wpisałeś), ale bez rozszerzenia:
c:\>"test"
"test"
Na koniec, jeśli wpiszesz "C:\test.bat"
, wynik będzie dokładnie taki, jak gdybyś dwukrotnie kliknął it:
c:\>"C:\test.bat"
"C:\test.bat"
Zauważ, że nie są to wszystkie możliwe wartości %0
może być, ponieważ można wywołać skrypt z innych folderów:
c:\some_folder>/../teST.bAt
/../teST.bAt
Wszystkie powyższe przykłady będą miały również wpływ na %~0
, ponieważ wyjście %~0
jest po prostu wyjściem %0
minus cudzysłowy (jeśli istnieją).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-18 04:00:19
Ten kod wyjaśnia użycie znaku ~ tilda, co było dla mnie najbardziej mylące. Kiedy to zrozumiałem, to znacznie ułatwia to zrozumienie:
@ECHO off
SET "PATH=%~dp0;%PATH%"
ECHO %PATH%
ECHO.
CALL :testargs "these are days" "when the brave endure"
GOTO :pauseit
:testargs
SET ARGS=%~1;%~2;%1;%2
ECHO %ARGS%
ECHO.
exit /B 0
:pauseit
pause
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-12 16:13:50
Wyświetla bieżącą lokalizację pliku lub katalogu, w którym aktualnie się znajdujesz. na przykład; jeśli plik wsadowy znajduje się w katalogu desktop, to "%~dp0" wyświetli katalog desktop. jeśli chcesz, aby wyświetlał bieżący katalog z bieżącą nazwą pliku, możesz wpisać "%~dp0% ~ n0% ~ x0".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-25 18:00:51