使PowerShell的Start-Transcript更加紧凑

时间:2017-05-12 18:36:08

标签: powershell cmd

当我到达符合特定条件的文件时,我使用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脚本与命令行脚本一样紧凑?

1 个答案:

答案 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-ObjectWhere-Object的别名)命令确保我们只获取输出文件中的完整文件路径