Cóż, dla uzyskania nazwy pliku partii najłatwiej byłoby po prostu użyć %~n0
.
@echo %~n0
wyświetli nazwę (bez rozszerzenia) aktualnie uruchomionego pliku wsadowego (chyba że zostanie wykonany w podprogramie wywoływanym przez call
). Kompletną listę takich „specjalnych” podstawień dla nazw ścieżek można znaleźć help for
na końcu pomocy:
Ponadto ulepszono podstawianie odwołań do zmiennych FOR. Możesz teraz użyć następującej opcjonalnej składni:
%~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
Modyfikatory można łączyć, aby uzyskać złożone wyniki:
%~dpI - expands %I to a drive letter and path only
%~nxI - expands %I to a file name and extension only
%~fsI - expands %I to a full path name with short names only
Aby jednak precyzyjnie odpowiedzieć na twoje pytanie: podłańcuchy są wykonywane za pomocą :~start,length
notacji:
%var:~10,5%
wyodrębni 5 znaków z pozycji 10 w zmiennej środowiskowej %var%
.
UWAGA: Indeks ciągów jest oparty na zerach, więc pierwszy znak znajduje się w pozycji 0, drugi w pozycji 1 itd.
Aby uzyskać podciągi zmiennych argumentów, takich jak %0
, %1
itp., Musisz najpierw przypisać je do normalnej zmiennej środowiskowej set
:
:: Does not work:
@echo %1:~10,5
:: Assign argument to local variable first:
set var=%1
@echo %var:~10,5%
Składnia jest jeszcze bardziej rozbudowana:
%var:~-7%
wyodrębnia 7 ostatnich znaków %var%
%var:~0,-4%
wyodrębni wszystkie znaki oprócz czterech ostatnich, co również pozbawi cię rozszerzenia pliku (przyjmując trzy znaki po kropce [ .
]).
Zobacz help set
szczegóły dotyczące tej składni.
setlocal ENABLEDELAYEDEXPANSION \r\n for /f %%s in ('set') do ( \r\n set tmp=%%s \r\n echo !tmp:~-3! \r\n )