2

Это Windows 10. Вопрос очень прост, я просто не знаю правильный синтаксис для этого.

Это перечислит все файлы, заканчивающиеся на .log:

dir /s /p *.log

Это урезает файл:

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

То, что я хотел бы сделать, это направить вывод первой операции ко второй операции, таким образом обрезая соответствующие файлы, возвращаемые dir . Как бы я это сделал?

3 ответа3

1

Трубопровод для нормального cmd не так распространен в Windows. Поэтому для cmd вам, вероятно, придется получить список этих файлов в переменной и использовать цикл for для их обработки. Возможно, вы также можете напрямую использовать команду dir в цикле.

Я бы выбрал PowerShell, который делает то же самое, но, на мой взгляд, более читабелен:

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

Если вы хотите , чтобы подтвердить каждый файл /P на вашей dir делает паузу каждый экран) , вы можете использовать -Confirm переключатель Clear-Content

Если вы хотите использовать цикл for по любой причине и использовать echo, вы можете использовать:

Get-ChildItem -Recurse -Filter "*.log" | %{ echo $null > $_; }
0

Как обрезать совпадающие файлы, возвращаемые dir /s /p *.log?

Используйте следующий пакетный файл (test.cmd):

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

Пример использования:

> 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

Дальнейшее чтение

0

Чтобы просто собрать вывод dir в файле журнала, удалите /p и перенаправьте dir /s * .log> myfile.log

Это создаст новый файл, удалив любое предыдущее содержимое.

Если вам нужен полный путь в каждой строке, вместо перечисления по подкаталогу используйте /b dir /s /b * .log> myfile.log

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .