如何使用Powershell从文本文件中删除回车?

时间:2012-05-25 18:00:10

标签: powershell scripting replace find

我正在使用以下命令将目录内容输出到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运行脚本,它仍然不会替换任何东西。似乎不知道如何处理它。

3 个答案:

答案 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

...如果您不需要文件夹名称。