如何从PowerShell中删除文件夹中所有文本文件中的某些单词?

时间:2013-01-21 13:47:36

标签: powershell powershell-v2.0 powershell-v3.0 powershell-ise

我有一种情况需要从文件夹中的所有文本文件中删除一些单词。 我知道如何只在1个文件中执行此操作,但我需要自动为该文件夹中的所有文本文件执行此操作。我根本不知道如何在powershell中做到这一点。 文件名是随机的。

请帮忙。

这是代码


$ txt = get-content c:\ work \ test \ 01.i

$ txt [0] = $ txt [0] -replace' - '

$ txt [$ txt.length - 1] = $ txt [$ txt.length - 1] -replace' - '

$ txt | set-content c:\ work \ test \ 01.i


基本上它jsut从第一行和最后一行删除了一个“ - ”,但我需要对文件夹中的所有文件执行此操作。

5 个答案:

答案 0 :(得分:1)

Get-ChildItem c:\yourfolder -Filter *.txt | Foreach-Object{
   ... your code goes here ...
   ... you can access the current file name via $_.FullName ...
}

答案 1 :(得分:1)

以下是一个完整的工作示例:

Get-ChildItem c:\yourdirectory -Filter *.txt | Foreach-Object{
(Get-Content $_.FullName) | 
Foreach-Object {$_ -replace "what you want to replace", "what to replace it with"} | 
Set-Content $_.FullName
}

现在快速解释一下:

  • 带过滤器的Get-ChildItem:获取以.txt
  • 结尾的所有项目
  • 1st ForEach-Object:将执行大括号内的命令
  • Get-Content $ _。FullName:抓取.txt文件的名称
  • 2nd ForEach-Object:将执行文件
  • 中的文本替换
  • Set-Content $ _。FullName:用包含更改的新文件替换原始文件

重要说明:-replace正在使用正则表达式,因此如果您的文本字符串有任何特殊字符

答案 2 :(得分:0)

这样的事情?

ls c:\temp\*.txt | %{ $newcontent=(gc $_) -replace "test","toto"  |sc $_ }

答案 3 :(得分:0)

$files = get-item c:\temp\*.txt
foreach ($file in $files){(Get-Content $file) | ForEach-Object {$_ -replace 'ur word','new word'}  | Out-File $file}

我希望这会有所帮助。

答案 4 :(得分:0)

使用Get-Childitem过滤要修改的文件。 Per response to previous question“Powershell,与Windows一样,使用文件的扩展名来确定文件类型。”

此外: 您将使用您的示例显示的第一行和最后一行将所有“ - ”替换为“”,如果您使用此代码:

 $txt[0] = $txt[0] -replace '-', ''
 $txt[$txt.length - 1 ] = $txt[$txt.length - 1 ] -replace '-', ''