Nun, um nur den Dateinamen Ihrer Charge zu erhalten, wäre der einfachste Weg, einfach %~n0
zu verwenden.
@echo %~n0
ausgeben wird der Name (ohne die Erweiterung) des gerade laufenden Batch-Datei (es sei denn, durch call
genannt in einem Unterprogramm ausgeführt).
erweitert
Zusätzlich Substitution von FOR Variablenreferenzen wurde: Die vollständige Liste dieser „speziellen“ Ersetzungen für Pfadnamen können mit help for
, ganz am Ende der Hilfe. Sie können nun die folgenden optionalen Syntax:
%~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 kombiniert werden können Verbindung 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
genau auf Ihre Frage zu beantworten, aber: Substrings sind fertig mit die :~start,length
notation:
%var:~10,5%
extrahiert 5 Zeichen von Position 10 in der Umgebungsvariablen %var%
.
HINWEIS: Der Index der Saiten wird Null basiert, so dass das erste Zeichen an der Position 0, der zweite bei 1 usw.
Um Teilargumentations Variablen wie %0
, %1
, etc zu erhalten . Sie müssen sie zu einer normalen Umgebungsvariable zuweisen mit 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 von %var%
%var:~0,-4%
würden alle Zeichen mit Ausnahme der letzten vier extrahieren, die auch Sie von der Dateierweiterung befreien würde (vorausgesetzt, drei Zeichen nach der Periode [.
]).
Weitere Informationen zu dieser Syntax finden Sie unter help set
.
Das ist eine großartige, gründliche Antwort. Danke vielmals. – JosephStyons
Nun, das sind jetzt drei Antworten in eine oder so gerollt, dank Patrick :) – Joey
Substring Extraktion arbeitet nicht mit FOR-Schleife Variablen entweder Sie müssen also wie folgt tun (\ r \ n in der Code-Linie bricht ab, weil SO keine Zeilenumbrüche in Kommentaren zulässt): setlocal ENABLEDELAYEDEXPANSION \ r \ n für/f %% s in ('set') do (\ r \ n \t set tmp = %% s \ r \ n \t echo! Tmp: ~ -3! \ R \ n ) ' – Fr0sT