Nun, um nur den Dateinamen Ihres Stapels zu erhalten, ist es am einfachsten, ihn einfach zu verwenden %~n0
.
@echo %~n0
gibt den Namen (ohne die Erweiterung) der aktuell ausgeführten Batchdatei aus (sofern er nicht in einer von aufgerufenen Unterroutine ausgeführt wird call
). Die vollständige Liste solcher „speziellen“ Ersetzungen für Pfadnamen finden Sie help for
ganz am Ende der Hilfe:
Darüber hinaus wurde die Substitution von FOR-Variablenreferenzen verbessert. Sie können jetzt die folgende optionale Syntax verwenden:
%~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
Die Modifikatoren können kombiniert werden, um zusammengesetzte Ergebnisse zu erhalten:
%~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
Um Ihre Frage jedoch genau zu beantworten: Teilzeichenfolgen werden mit der :~start,length
Notation erstellt:
%var:~10,5%
extrahiert 5 Zeichen von Position 10 in der Umgebungsvariablen %var%
.
HINWEIS: Der Index der Zeichenfolgen basiert auf Null, sodass sich das erste Zeichen an Position 0, das zweite an 1 usw. befindet.
Um Teilargumentations Variablen wie zu bekommen %0
, %1
etc. müssen Sie sie eine normale Umgebungsvariable zuweisen Verwendung set
zuerst:
:: Does not work:
@echo %1:~10,5
:: Assign argument to local variable first:
set var=%1
@echo %var:~10,5%
Die Syntax ist noch leistungsfähiger:
%var:~-7%
extrahiert die letzten 7 Zeichen aus %var%
%var:~0,-4%
würde alle Zeichen außer den letzten vier extrahieren, wodurch Sie auch die Dateierweiterung entfernen würden (unter der Annahme von drei Zeichen nach dem Punkt [ .
]).
Siehe help set
Details zu dieser Syntax.
setlocal ENABLEDELAYEDEXPANSION \r\n for /f %%s in ('set') do ( \r\n set tmp=%%s \r\n echo !tmp:~-3! \r\n )