我正在使用以下命令将目录内容输出到txt文件:
$SearchPath="c:\searchpath"
$Outpath="c:\outpath"
Get-ChildItem "$SearchPath" -Recurse | where {!$_.psiscontainer} | Format-Wide -Column 1'
| Out-File "$OutPath\Contents.txt" -Encoding ASCII -Width 200
当我这样做时,我最终得到的是一个带有我需要的信息的txt文件,但它增加了许多我不需要的回车,使得输出更难以阅读。
这就是它的样子:
c:\searchpath\directory
name of file.txt
name of another file.txt
c:\searchpath\another directory
name of some file.txt
这使得txt文件需要大量滚动,但实际信息并不多,通常少于一百行。
我希望它看起来像:
c:\searchpath\directory
nameoffile.txt
c:\searchpath\another directory
another file.txt
这是我到目前为止所尝试的,而不是
$configFiles=get-childitem "c:\outpath\*.txt" -rec
foreach ($file in $configFiles)
{
(Get-Content $file.PSPath) |
Foreach-Object {$_ -replace "'n", ""} |
Set-Content $file.PSPath
}
我也试过'但是两个选项都保持文件不变。
另一次尝试:
Select-String -Pattern "\w" -Path 'c:\outpath\contents.txt' | foreach {$_.line}'
| Set-Content -Path c:\outpath\contents2.txt
当我在最后没有Set-content的情况下运行该字符串时,它看起来就像我在ISE中所需要的那样,但是一旦我在最后添加Set-Content,它就会再次回到我不知道的地方不需要它们。
这里有一些有趣的东西,如果我创建一个带有回车符和几个标签的文本文件,那么如果我使用的是同样的-replace脚本我一直在使用,但是使用t to replace the tabs, it works perfect. But
r和{{1然后在txt文件中的r和`n运行脚本,它仍然不会替换任何东西。似乎不知道如何处理它。
答案 0 :(得分:4)
Set-Content
默认添加换行符。在您上次尝试问题时,按Set-Content
替换Out-File
将为您提供所需的文件:
Select-String -Pattern "\w" -Path 'c:\outpath\contents.txt' | foreach {$_.line} |
Out-File -FilePath c:\outpath\contents2.txt
答案 1 :(得分:1)
这不是'r(撇号),它是一个反向滴答:`r。这是美国键盘布局上Tab键上方的键。 :)
答案 2 :(得分:1)
您可以使用Select-Object -ExpandProperty Name
:
Get-ChildItem "$SearchPath" -Recurse |
Where { !$_.PSIsContainer } |
Select-Object -ExpandProperty Name |
Out-File "$OutPath\Contents.txt" -Encoding ASCII -Width 200
...如果您不需要文件夹名称。