linha de comando do Windows - canaliza a saída da pesquisa dir para a operação (truncar)

2

Este é o Windows 10. A questão é muito simples, eu simplesmente não sei a sintaxe apropriada para fazer isso.

Isso listará todos os arquivos terminados em .log:

dir /s /p *.log

Isso truncará um arquivo:

echo|set /p=>"myfile.log"

O que eu gostaria de fazer é canalizar a saída da primeira operação para a segunda operação, truncando assim os arquivos correspondentes retornados por dir . Como eu faria isso?

    
por Oliver Williams 22.11.2016 / 13:19

3 respostas

1

O piping para o cmd normal não é tão comum no Windows. Assim, para o cmd, você provavelmente terá que obter uma lista desses arquivos na variável e usar um loop for para processá-los. Talvez você também possa usar diretamente o comando dir no loop.

Eu optaria pelo PowerShell, que faz uma coisa semelhante, mas é muito mais legível na minha opinião:

Get-ChildItem -Recurse -Filter "*.log" | Clear-Content

Se você quiser confirmar todos os arquivos (o /P no dir faz uma pausa em todas as telas), você pode usar a opção -Confirm em Clear-Content .

Se você quiser usar um loop for por qualquer motivo e usar o eco, poderá usar:

Get-ChildItem -Recurse -Filter "*.log" | %{ echo $null > $_; }
    
por 22.11.2016 / 15:31
0

Para apenas coletar a saída dir no arquivo de log, solte o / p e redirecione dir / s * .log > myfile.log

Isso criará um novo arquivo, excluindo qualquer conteúdo anterior.

Se você quiser o caminho completo em cada linha, em vez de listar por subdiretório, use / b dir / s / b * .log > myfile.log

    
por 22.11.2016 / 14:26
0

Como truncar os arquivos correspondentes retornados por dir /s /p *.log ?

Use o seguinte arquivo de lote (test.cmd):

@echo off
setlocal
for /f "tokens=*" %%f in ('dir /b /s *.log') do (
  echo|set /p=>"%%f"
  )
endlocal

Exemplo de uso:

> dir /s /p *.log
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

02/10/2016  17:02             2,305 test.log
               1 File(s)          2,305 bytes

 Directory of F:\test\test

02/10/2016  17:02             2,305 test.log
               1 File(s)          2,305 bytes

 Directory of F:\test\test with space

02/10/2016  17:02             2,305 test.log
               1 File(s)          2,305 bytes

     Total Files Listed:
               3 File(s)          6,915 bytes
               0 Dir(s)  1,737,619,595,264 bytes free

> test

> dir /s /p *.log
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

24/11/2016  10:39                 0 test.log
               1 File(s)              0 bytes

 Directory of F:\test\test

24/11/2016  10:39                 0 test.log
               1 File(s)              0 bytes

 Directory of F:\test\test with space

24/11/2016  10:39                 0 test.log
               1 File(s)              0 bytes

     Total Files Listed:
               3 File(s)              0 bytes
               0 Dir(s)  1,737,619,607,552 bytes free

Leitura Adicional

por 24.11.2016 / 11:43