
Ich habe eine Windows-Batchdatei, die eine Reihe von Dateien verarbeitet. Dabei verwende ich die folgende Zeile:
forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c logreader.py @file > \"%~dpn1%ParsedLogDir%\@file_Logreader.txt\"
Das funktioniert einwandfrei, durchläuft aber im Wesentlichen alle meine Dateien (%SupportLog%*) und übergibt sie einzeln an das Skript „logreader.py“.
Was ich wirklich machen möchte, ist eine Liste oder einen Parameter aller dieser Dateien zu erstellen und sie alle auf einmal an das Python-Skript zu übergeben, sodass der auszuführende Befehl folgendermaßen aussehen würde:
logreader.py "logfile.log" "logfile.log.1" "logfile.log.3" .....
Ich habe versucht, den SET-Befehl innerhalb des Forfile-Befehls so zu verwenden, dass:
forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c set PARAMS=%PARAMS%@file "
Wenn ich dies jedoch ausführe und ECHO eingeschaltet lasse, sehe ich:
forfiles /p "C:\Path\log" /m "logfile.log*" /c "cmd /c set PARAMS=@file "
Was falsch ist. Und wenn ich „echo %PARAMS%“ verwende, erhalte ich kein Ergebnis.
Gibt es eine Möglichkeit, dies zu erreichen?
Vielen Dank
Antwort1
Ändern von Umgebungsvariablen in einemKind cmd
Instanz (das ist, was cmd /c
aufgerufen wird) beeinflusst die Umgebung im übergeordneten cmd
Prozess nicht. Der folgende Codeausschnitt könnte helfen:
SETLOCAL EnableExtensions EnableDelayedExpansion
set "LogDir=%~dpn1log" my guess only
set "SupportLog=logfile.log" my guess only
set "PARAMS=" initial value
rem 1st try for /R "%LogDir%" %%a in ("%SupportLog%*") do set PARAMS=!PARAMS! "%%~a"
rem 2nd try for %%a in ("%LogDir%\%SupportLog%*") do set "PARAMS=!PARAMS! "%%~a""
rem 3rd try
for %%a in ("%LogDir%\%SupportLog%*") do set "PARAMS=!PARAMS! "%%~nxa""
echo logreader.py %PARAMS%
Beachten Sie, dass der Imperativ logreader.py
lediglich echo
zu Debugzwecken verwendet wird.
Ich verstehe das Ziel der Weiterleitung jedoch nicht >
, tut mir leid ...
Ressourcen(Pflichtlektüre):
- (Befehlsreferenz)Ein AZ-Index der Windows CMD-Befehlszeile
- (weitere Besonderheiten)Befehlszeilensyntax der Windows CMD-Shell
- (
%~a
usw. Sonderseite)Befehlszeilenargumente (Parameter) - (
>>
,2>1
usw. Spezialseite)Umleitung
Bearbeiten:
- 1. Versuch
for /R
rekursiert den Ordnerbaum: abgelehnt; versuchen Siefor %%a
:Führen Sie einen Befehl bedingt für mehrere Dateien aus; - Der 2. Versuch
"%%~a"
ergibt den vollqualifizierten Dateinamen; - Beim 3. Versuch
"%%~nxa"
werden nur der Dateiname und die Erweiterung zurückgegeben (kein Pfad).