Como percorrer os arquivos nomeados em um arquivo de texto? Windows Server 2012

0
  • Caixa cmd.exe do Windows Server 2012
  • Eu preciso criar um arquivo em lote, chamá-lo de 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.
  • Não consigo usar um filespec no comando FOR porque preciso editar dlist.txt manualmente depois de criá-lo. Eu não quero processar todos os dirs como DIV_* , apenas alguns deles.
  • A criação de 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.
  • Existe um parâmetro para 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.
  • Eu preciso fazer vários comandos para cada diretório em dlist.txt , alguns dos quais estão definindo um nome de arquivo temporário chamado% tempoutfile%, em seguida, usado em fromxsf .
  • Li várias páginas que encontrei no Google, incluindo algumas do Superusuário, mas os exemplos que podem funcionar para o cmd.exe não funcionaram para mim. Talvez o Windows 2012 Server seja muito antigo? Eu não posso mudar isso, tenho que trabalhar com o que tenho.
  • 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%.
  • Parece que não temos o powershell ou, pelo menos, não há um caminho definido para ele.

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:

  • %código%. Para este caso, 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
)

Principais problemas no meu loop

  1. Use a variável "tokens=*" apenas uma vez por loop e atribua-a a %%f . A partir de então, use a variável indir .
  2. Eu removi o uso de !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.
por Bulrush 06.09.2018 / 16:47

0 respostas