Wie kann ich Pfad und Dateinamen aus einer Variablen extrahieren?
Setlocal EnableDelayedExpansion
set file=C:\Users\l72rugschiri\Desktop\fs.cfg
Ich möchte das tun, ohne eine Funktion oder ein GOTO zu verwenden. ist es möglich?
batch-file
path
rschirin
quelle
quelle
Antworten:
Ich bin mir nicht sicher, was du mit keiner "Funktion" meinst.
Wechseln Sie natürlich
ECHO
zuSET
, um die Variablen festzulegen, anstatt sie zu ECHOEN ...Eine vollständige Liste finden Sie in der
for
Dokumentation .Ceztkos Testfall (als Referenz)
Kommentar: siehe Kommentare.
quelle
/f
bewirkt.Sie können Pfad und Dateiname nur aus (1) einem Parameter der BVT selbst
%1
oder (2) dem Parameter eines CALL%1
oder (3) einer lokalen FOR-Variablen extrahieren%%a
.in
HELP CALL
oderHELP FOR
Sie können detailliertere Informationen finden:% ~ 1 - erweitert% 1 um alle umgebenden Anführungszeichen (")
% ~ f1 - erweitert% 1 zu einem vollständig qualifizierten Pfadnamen
% ~ d1 - erweitert% 1 nur zu einem Laufwerksbuchstaben
% ~ p1 - erweitert% 1 nur zu einem Pfad
% ~ n1 - erweitert% 1 nur auf einen Dateinamen
% ~ x1 - erweitert% 1 nur auf eine Dateierweiterung
% ~ s1 - erweiterter Pfad enthält nur Kurznamen
% ~ a1 - erweitert% 1 auf Dateiattribute
% ~ t1 - erweitert% 1 bis Datum / Uhrzeit der Datei
% ~ z1 - erweitert% 1 auf die Größe der Datei
Und dann versuchen Sie Folgendes:
Übergeben Sie entweder die zu analysierende Zeichenfolge als Parameter an einen CALL
oder das Äquivalent, übergeben Sie den Dateinamen als lokale FOR-Variable
quelle
All dies funktioniert für mich:
Ausgabe:
quelle
Wenn Sie Informationen aus der aktuell ausgeführten Batchdatei wünschen, versuchen Sie Folgendes:
mehr Proben? C:> HILFE ANRUFEN
% 0 = Parameter 0 = Batchdatei% 1 = Parameter 1 - 1. Par. an Batchdatei übergeben ... damit Sie das Zeug (zB "~ dp") zwischen dem ersten (zB "%") und dem letzten (zB "1") auch für Parameter ausprobieren können
quelle
Späte Antwort, ich weiß, aber für mich ist das folgende Skript sehr nützlich - und es beantwortet auch die Frage, indem es zwei Fliegen mit einer Flagge trifft ;-)
Das folgende Skript erweitert SendTo im Kontextmenü des Datei-Explorers:
Wenn Sie dieses Skript ohne Parameter ausführen, indem Sie darauf doppelklicken, kopiert es sich selbst in den Ordner SendTo und benennt es in "A - In CMD shell.cmd öffnen" um. Danach steht es im Kontextmenü "SentTo" zur Verfügung.
Klicken Sie dann mit der rechten Maustaste auf eine Datei oder einen Ordner im Windows Explorer und wählen Sie "SendTo> A - In CMD shell.cmd öffnen".
Das Skript ändert Laufwerk und Pfad in den Pfad, der die ausgewählte Datei oder den ausgewählten Ordner enthält, und öffnet eine Befehlsshell mit diesem Pfad - nützlich für Visual Studio-Code, da Sie dann einfach "Code" eingeben können. um es im Kontext Ihres Projekts auszuführen.
Wie funktioniert es?
%0
- vollständiger Pfad des Batch-Skripts%~d1
- das im ersten Argument enthaltene Laufwerk (z. B. "C:")%~dp1
- der im ersten Argument enthaltene Pfadcmd /k
- öffnet eine Befehlsshell, die offen bleibtWird hier nicht verwendet, ist aber
%~n1
der Dateiname des ersten Arguments.Ich hoffe das ist hilfreich für jemanden.
quelle