当我到达符合特定条件的文件时,我使用PowerShell浏览目录并记录当前文件路径。在我的示例中,它是一个以2开头并且后面有两位数的文件:
Start-Transcript -path C:\test.txt
Get-ChildItem -recurse | Where-Object {$_.Name -match "2\d\d"}
Stop-Transcript
在切换到PowerShell之前,我只是使用命令行,
dir *2??*.doc /b /s /A:-D > C:\test.txt
这拾起了一堆我不想要的东西。但是,这个命令的好处是我的文本文件是紧凑的,每行文件的整个文件路径在一行:
C:\folder1\234.doc
C:\folder1\folder2\235.doc
Powershell中的成绩单功能要大得多:
Start time: 20170512141758
...
**********************
Transcript started, output file is C:\test.txt
Directory: C:\folder1
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 12-May-17 14:07 0 234.doc
Directory: C:\folder1\folder2
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 12-May-17 14:05 0 235.doc
**********************
Windows PowerShell transcript end
End time: 20170512141758
**********************
如何使我的PowerShell脚本与命令行脚本一样紧凑?
答案 0 :(得分:2)
管道直接输出到Out-File
,而不是使用Start-Transcript
:
Get-ChildItem -Recurse | Where-Object {$_.Name -match "2\d\d"} |Select -Expand FullName |Out-File C:\test.txt
Select
之后Select-Object
(Where-Object
的别名)命令确保我们只获取输出文件中的完整文件路径