Variable zum Abrufen des absoluten Pfads im Windows-Batch-Skript

9

Ich habe folgendes Skript, um alle Dateien rekursiv aus einem Verzeichnis mit einer .phtmlErweiterung aufzulisten.

@echo off
setlocal
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @relpath"') do echo %%G >> listoffiles.txt
endlocal
exit

Es wird nur der relative Pfad zu Dateien aufgelistet. Das obige Skript wird von einem Zwischenspeicherort ausgeführt, daher erhalte ich keine vollständigen Pfade in @relpathVariablen.

Außerdem erhalte ich Anführungszeichen in den Ergebniszeilen, die ich entfernen möchte.

Ich möchte mit ein paar Codeänderungen einen absoluten Pfad zu diesen Dateien erhalten. Wenn eine globale Variable verfügbar ist, die in meinem Code verwendet werden kann, ist dies das Beste für mich, da ich nicht viel von Windows Batch Scripter bin.

Vicky Dev
quelle

Antworten:

3

Ich erhalte keine vollständigen Pfade in der @relpathVariablen.

Außerdem erhalte ich Anführungszeichen in den Ergebniszeilen, die ich entfernen möchte.

Die folgende Batch-Datei macht, was Sie wollen:

@echo off
setlocal enableDelayedExpansion
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @path"') do (
  set _name=%%G
  rem strip the quotes
  echo !_name:~1,-1! >> listoffiles.txt
  )
endlocal
exit

Anmerkungen:

  • Verwendet @path(vollständiger Pfad der Datei) anstelle von @relpath(relativer Pfad der Datei).
  • Verwendet einen Variablenausdruck substring, um die Anführungszeichen zu entfernen ( :~1,-1entfernt das erste und das letzte Zeichen aus der Variablenzeichenfolge).
  • Wird verwendet, setlocal EnableDelayedExpansiondamit Variablen in der forSchleife korrekt aktualisiert werden .

Weiterführende Literatur

  • Ein AZ-Index der Windows CMD-Befehlszeile - Eine hervorragende Referenz für alle Windows-Cmd-Zeilen.
  • enabledelayedexpansion - Eine verzögerte Erweiterung führt dazu, dass Variablen zur Ausführungszeit und nicht zur Analysezeit erweitert werden.
  • for / f - Schleifenbefehl gegen die Ergebnisse eines anderen Befehls.
  • forfiles - Wählen Sie eine Datei (oder einen Satz von Dateien) aus und führen Sie für jede Datei einen Befehl aus. Stapelverarbeitung.
  • Variablen - Extrahiert einen Teil einer Variablen (Teilzeichenfolge).
DavidPostill
quelle