我有一种情况需要从文件夹中的所有文本文件中删除一些单词。 我知道如何只在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从第一行和最后一行删除了一个“ - ”,但我需要对文件夹中的所有文件执行此操作。
答案 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
}
现在快速解释一下:
重要说明:-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 '-', ''