0

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

请帮忙。

这是代码


$txt = 获取内容 c:\work\test\01.i

$txt[0] = $txt[0] -替换'-'

$txt[$txt.length - 1 ] = $txt[$txt.length - 1 ] -替换'-'

$txt | 设置内容 c:\work\test\01.i


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

4

5 回答 5

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 结尾的项目
  • 第一个 ForEach-Object:将执行大括号内的命令
  • Get-Content $_.FullName:获取 .txt 文件的名称
  • 2nd ForEach-Object:将执行文件内文本的替换
  • Set-Content $_.FullName:用包含更改的新文件替换原始文件

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

于 2013-05-25T20:39:53.177 回答
1
Get-ChildItem c:\yourfolder -Filter *.txt | Foreach-Object{
   ... your code goes here ...
   ... you can access the current file name via $_.FullName ...
}
于 2013-01-21T14:03:41.483 回答
0

用于Get-Childitem筛选要修改的文件。根据对上一个问题“Powershell 与 Windows 一样,使用文件的扩展名来确定文件类型”的回答。

另外:您将使用您的示例显示的内容在第一行和最后一行将所有“-”替换为“”,如果您使用它:

 $txt[0] = $txt[0] -replace '-', ''
 $txt[$txt.length - 1 ] = $txt[$txt.length - 1 ] -replace '-', ''
于 2015-03-13T17:24:17.293 回答
0

像这样的东西?

ls c:\temp\*.txt | %{ $newcontent=(gc $_) -replace "test","toto"  |sc $_ }
于 2013-01-21T14:02:51.517 回答
0
$files = get-item c:\temp\*.txt
foreach ($file in $files){(Get-Content $file) | ForEach-Object {$_ -replace 'ur word','new word'}  | Out-File $file}

我希望这有帮助。

于 2015-01-04T12:54:33.447 回答