1

У меня есть пакетный файл Windows, который обрабатывает кучу файлов. В рамках этого я использую следующую строку:

forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c logreader.py @file > \"%~dpn1%ParsedLogDir%\@file_Logreader.txt\"

Это работает нормально, но, по сути, проходит через все мои файлы (% SupportLog% *) и передает каждый из них в скрипт «logreader.py».

Что я действительно хочу сделать, так это создать список или параметр всех этих файлов и передать их все сразу в скрипт Python, такая команда, которая должна быть выполнена, будет выглядеть примерно так:

logreader.py "logfile.log" "logfile.log.1" "logfile.log.3" .....

Я попытался использовать команду SET внутри команды forfile, чтобы:

forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c set PARAMS=%PARAMS%@file "

Тем не менее, когда запустить это и оставить ECHO ON, я вижу:

forfiles /p "C:\Path\log" /m "logfile.log*" /c "cmd /c set PARAMS=@file "

Что неверно. И когда я "эхо% PARAMS%", я не получаю результата.

Есть ли способ добиться этого?

Большое спасибо

1 ответ1

1

Изменение переменных среды в дочернем экземпляре cmd (это то, что вызывает cmd /c ) не влияет на среду в родительском процессе cmd . Следующий фрагмент кода может помочь:

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%

Обратите внимание, что императивный logreader.py просто echo в целях отладки.

Тем не менее, я не восприму > перенаправления, извините ...

Ресурсы (требуется чтение):

Редактировать:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .