【问题标题】:Powershell script for going into texts files within a directory and replacing characters用于进入目录中的文本文件并替换字符的 Powershell 脚本
【发布时间】:2015-04-12 22:01:10
【问题描述】:
早上好,
我正在尝试研究如何进入目录中的多个文本文件,并将字符替换为以下内容:
'BS' = '\'
'FS' = '/'
'CO' = ':'
到目前为止,我设法做到的是:
(get-content C:\users\x\desktop\info\*.txt) | foreach-object {$_ -replace "bs", "\"} | set-content C:\Users\x\desktop\info\*.txt
我有 6 个文本文件,其中都有一行文本,上面的脚本将文本行复制到所有文本文件中。所以我最终得到的是 6 个文本文件,每个文件有 6 行文本,我需要 6 个文本文件和 1 行原始文本。
如果这是有道理的,有没有人对此有任何指示?
【问题讨论】:
标签:
powershell
text
replace
find
powershell-2.0
【解决方案1】:
其他一些例子,应该做同样的伎俩:)
$fileName = Get-ChildItem "C:\users\x\desktop\info\*.txt" -Recurse
$filename | %{
(gc $_) -replace "BS","\" -replace "FS","/" -replace "CO",":" |Set-Content $_.fullname
}
【解决方案2】:
这应该可以解决问题:
Get-ChildItem C:\users\x\desktop\info\*.txt | ForEach-Object {(Get-Content $_.PSPath) | Foreach-Object {$_ -replace "bs", "\" -replace "fs", "/" -replace "co", ":"} | Set-Content $_.PSPath}
您的行为未按预期执行的原因是,您实际上是在使用 get-content 从所有文件中取出所有内容。这充当所有文件中所有文本的字符串连接。
您首先必须获取文件列表,然后将其通过管道传输到 foreach 以获取每个文件的内容,然后替换您想要替换的内容。