get.bat
, para processar todos os diretórios listados em dlist.txt
, que está no mesmo diretório que get.bat
. Nomes de diretório são um por linha em dlist.txt. dlist.txt foi criado com dir /b DIV_* > dlist.txt
. Esses arquivos DIV_ são, na verdade, subdiretórios para o diretório em que meu arquivo de lote é executado. dlist.txt
manualmente depois de criá-lo. Eu não quero processar todos os dirs como DIV_*
, apenas alguns deles. dlist.txt
com dir /w DIV_* > dlist.txt
significa que todos os nomes de diretório têm [] em torno deles e não posso usá-los. get.bat
, que é um nome de arquivo base para conter todos os resultados do comando fromxsf
. A extensão .txt será adicionada pelo arquivo em lote. dlist.txt
, alguns dos quais estão definindo um nome de arquivo temporário chamado% tempoutfile%, em seguida, usado em fromxsf
. fromxsf
que processa cada diretório em dlist.txt
requer o diretório como um parâmetro após o -cd
e um arquivo de saída temporário como outro parâmetro que é% tempoutfile%. Veja o que eu tentei usando um loop FOR:
set destdir=c:\tempdir
set outfile=%destdir%\%1.txt
FOR /F %%f in ('type dlist.txt') DO (
echo "--------------------"
echo Basedir=%%f should be directory
set tempoutfile=../%%f.txt
echo outfile=%destdir%\%outfile%
echo tempoutfile=%tempoutfile%
echo Processing dir %%f, to tempfile %tempfile%
pause
rem Below is the command to process the dir name in %%f to make a temp file in %tempoutfile%
fromxsf %tempoutfile% -cd %%f +m -nbs -Rep -nofrills
if exist "%destdir%" (
echo " " >> %outfile%
echo "{DIVNAME=%i}" >> %outfile%
rem Append %tempoutfile% to %outfile%.
type %tempoutfile% >> %outfile%
del %tempoutfile%
)
)
Para o acima, o valor de %% f é sempre a primeira linha de dlist.txt. Isso não é o que eu quero.
O que estou fazendo no loop é exibir o conteúdo processado do diretório em um arquivo temporário em% tempfile% e, em seguida, concatenar o conteúdo de% tempfile% to% destdir% \% outfile%. mycommand
requer o diretório de entrada %% f como um argumento da linha de comandos. Eu não consigo redirecionar STDOUT e acrescentar a saída a% destdir% \% outfile%.
Alguns loops FOR alternativos que eu tentei:
FOR %%f in (dlist.txt) DO (
é sempre o segundo nome do diretório em %%f
e nunca muda. Alguém sabe como fazer isso?
Obrigado!
EDIT: Obrigado. Eu descobri usando a expansão atrasada e outro post que encontrei usando o Google. O núcleo do loop é este, com nomes de arquivos contidos no arquivo de texto dlist.txt
one filename por linha. Meu problema foi a falta da opção dlist.txt
. Também a variável! A notação deve ser usada TODAS as vezes no loop. O loop abaixo também possui instruções echo para mostrar os valores das variáveis.
setlocal EnableDelayedExpansion
set outfile=c:\temp\tempout.txt
del %outfile%
FOR /f "tokens=*" %%f in (dlist.txt) DO (
echo.
echo --------------------
set indir=%%f
echo Basediv indir=!indir!
echo Processing division !indir!
echo. >> %outfile%
echo {DIVNAME=!indir!} >> %outfile%
pause
fromxsf %outfile% -cd !indir! +m -nbs -Rep -nofrills -a
)
"tokens=*"
apenas uma vez por loop e atribua-a a %%f
. A partir de então, use a variável indir
. !indir!
porque o comando %tempoutfile%
me permite anexar a saída de si mesmo (usando -a) SE o arquivo existe, o que acontece nesse caso. Tags command-line windows batch cmd.exe