
Tengo un archivo por lotes de Windows que procesa un montón de archivos. Como parte de esto utilizo la siguiente línea:
forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c logreader.py @file > \"%~dpn1%ParsedLogDir%\@file_Logreader.txt\"
Esto funciona bien, pero esencialmente recorre todos mis archivos (%SupportLog%*) y pasa cada uno por uno al script "logreader.py".
Lo que realmente quiero hacer es crear una lista o parámetro de todos estos archivos y pasarlos todos a la vez al script de Python, de modo que el comando que debería ejecutarse sería similar a:
logreader.py "logfile.log" "logfile.log.1" "logfile.log.3" .....
Intenté usar el comando SET dentro del comando forfile de manera que:
forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c set PARAMS=%PARAMS%@file "
Sin embargo, cuando ejecuto esto y dejo el ECHO encendido, veo:
forfiles /p "C:\Path\log" /m "logfile.log*" /c "cmd /c set PARAMS=@file "
Lo cual es incorrecto. Y cuando hago "hacer eco de %PARAMS%", no obtengo ningún resultado.
¿Hay alguna manera de lograr esto?
Muchas gracias
Respuesta1
Cambiar las variables de entorno en unniño cmd
La instancia (eso es lo que cmd /c
invoca) no afecta el entorno en el cmd
proceso principal. El siguiente fragmento de código podría ayudar:
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%
Tenga en cuenta que imperativo logreader.py
se edita simplemente echo
con fines de depuración.
Sin embargo, no entiendo el objetivo de >
la redirección, lo siento...
Recursos(lectura obligatoria):
- (referencia de comando)Un índice AZ de la línea de comando CMD de Windows
- (particularidades adicionales)Sintaxis de la línea de comandos de Windows CMD Shell
- (
%~a
etc. página especial)Argumentos de la línea de comando (parámetros) - (
>>
,2>1
etc. página especial)Redirección
Editar:
- 1er intento
for /R
recurre al árbol de carpetas: rechazado; intentarfor %%a
:ejecutar condicionalmente un comando en varios archivos; - El segundo intento
"%%~a"
proporciona un nombre de archivo completo; - El tercer intento
"%%~nxa"
proporciona el nombre y la extensión del archivo (sin ruta).