
Eu tenho um arquivo em lote do Windows que processa vários arquivos. Como parte disso eu uso a seguinte linha:
forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c logreader.py @file > \"%~dpn1%ParsedLogDir%\@file_Logreader.txt\"
Isso funciona bem, mas essencialmente percorre todos os meus arquivos (% SupportLog% *) e passa cada um por um para o script "logreader.py".
O que eu realmente quero fazer é criar uma lista ou parâmetro de todos esses arquivos e passar todos eles de uma vez para o script Python, de forma que o comando que deve ser executado seja semelhante a:
logreader.py "logfile.log" "logfile.log.1" "logfile.log.3" .....
Tentei usar o comando SET dentro do comando forfile de forma que:
forfiles /p "%~dpn1%LogDir%" /m "%SupportLog%*" /c "cmd /c set PARAMS=%PARAMS%@file "
Porém, ao executar isso e deixar o ECHO ON, vejo:
forfiles /p "C:\Path\log" /m "logfile.log*" /c "cmd /c set PARAMS=@file "
O que está incorreto. E quando eu "eco %PARAMS%", não obtenho resultado.
Existe uma maneira de conseguir isso?
Muito obrigado
Responder1
Alterando variáveis de ambiente em umcriança cmd
instância (é isso que cmd /c
invoca) não afeta o ambiente no cmd
processo pai. O próximo trecho de código pode ajudar:
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%
Observe que imperativo logreader.py
é meramente echo
editado para fins de depuração.
Porém, não apreendo alvo de >
redirecionamento, desculpe...
Recursos(leitura obrigatória):
- (referência de comando)Um índice AZ da linha de comando do Windows CMD
- (particularidades adicionais)Sintaxe de linha de comando do shell CMD do Windows
- (
%~a
etc. página especial)Argumentos de linha de comando (parâmetros) - (
>>
,2>1
etc. página especial)Redirecionamento
Editar:
- 1ª tentativa
for /R
recorre à árvore de pastas: rejeitado; tentarfor %%a
:executar condicionalmente um comando em vários arquivos; - A segunda tentativa
"%%~a"
fornece um nome de arquivo totalmente qualificado; - A terceira tentativa
"%%~nxa"
fornece o nome e a extensão do arquivo (sem caminho).