Eu tenho um arquivo em lotes do Windows que processa um monte de arquivos. Como parte disso, 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 deles 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 só vez para o script Python, de modo que o comando que deve ser executado se pareça com:
logreader.py "logfile.log" "logfile.log.1" "logfile.log.3" .....
Eu 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 "
No entanto, quando executar isso e deixar o ECHO, vejo:
forfiles /p "C:\Path\log" /m "logfile.log*" /c "cmd /c set PARAMS=@file "
Qual é incorreto E quando eu "ecoa% PARAMS%", não obtenho resultado.
Existe uma maneira de conseguir isso?
Muito obrigado
windows
command-line
batch
Swinster
fonte
fonte
Respostas:
Alterar as variáveis de ambiente em uma instância filha
cmd
(isso é o quecmd /c
chama) não afeta o ambiente nocmd
processo pai . O próximo trecho de código poderia ajudar:Observe que o imperativo
logreader.py
é meramenteecho
editado para fins de depuração.No entanto, eu não apreendo alvo de
>
redirecionamento, desculpe ...Recursos (leitura obrigatória):
%~a
página especial, etc.) Argumentos da linha de comando (Parâmetros)>>
,2>1
etc. página especial) RedirecionamentoEditar :
for /R
recurses na árvore de pastas : rejeitada; tentefor %%a
: condicionalmente executar um comando em vários arquivos ;"%%~a"
fornece um nome de arquivo completo;"%%~nxa"
dá nome e extensão de arquivo (sem caminho).fonte
for /r
parece recurse a árvore de pastas. Agora, tudo bem, na primeira vez que executo esse arquivo em lote, como posso definir oFor
loop no início do lote que avalia a pasta antes de criar uma subpasta para armazenar o arquivo analisado, mas se eu executar o lote novamente, se escolher arquivo na subpasta. (desculpe pelos múltiplos comentários, eu não consegui pegar o jeito deles; ()/r
e definir oSET
para o diretório correto. Muito obrigado, tudo feito, pelo que eu posso ver. Talvez eu deva começar a procurar no PowerShell para construir essas coisas no futuro.For %%A in ("%~dpn1%LogDir%\%SupportLog%*") do ( set PARAMS=!PARAMS! "%%A" )
. Isso é usado em conjunto com a passagem de um arquivo para o arquivo de lote em primeiro lugar (através de um atalho SentTo)