这是 Windows 10。问题很简单,我只是不知道执行此操作的正确语法。
这将列出所有以 .log 结尾的文件:
dir /s /p *.log
这将截断文件:
echo|set /p=>"myfile.log"
我想要做的是将第一个操作的输出通过管道传输到第二个操作,从而截断返回的匹配文件dir
。我该怎么做?
答案1
在 Windows 中,普通 cmd 的管道并不常见。因此,对于 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 > $_; }
答案2
要仅收集日志文件中的目录输出,请删除 /p 并重定向 dir /s *.log >myfile.log
这将创建一个新文件,并删除所有以前的内容。
如果您希望每行都有完整路径,而不是按子目录列出,请使用 /b dir /s /b *.log >myfile.log
答案3
我如何截断返回的匹配文件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
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 目录- 显示文件和子文件夹的列表。
- 对于/f- 循环命令以执行另一个命令的结果。