【问题标题】:How to replace text in multiple files and save each in new folder using PowerShell?如何使用 PowerShell 替换多个文件中的文本并将每个文件保存在新文件夹中?
【发布时间】:2019-12-18 06:04:28
【问题描述】:

我有一个包含多个文件的文件夹。我想读取每个文件并替换为用户传递给应用程序的任何内容(参数)。文件内容替换后,我想将文件保存在新文件夹中。

这是我目前所拥有的:

gci C:\Users\Person\Documents\Test1\*.bat -recurse | ForEach {
  (Get-Content $_ | ForEach {$_ -replace "<client_instance>", "ClientName"}) | Set-Content $_ 
}

我的第一个问题是,这是否正确,其次,如何更改“Set-Content”以便将文件保存在不同的文件夹中?

我想为源和目标使用变量:

$sourePath
$destinationPath

我是 PowerShell 新手,因此我们将不胜感激。谢谢。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    是的,您的代码很好。您可以像这样构建新路径:

    $files = gci C:\Users\Person\Documents\Test1\*.bat -recurse
    $destinationpath = "C:\users\person\documents\test2"
    ForEach ($file in $files){
        Get-Content $file.fullname | ForEach {$_ -replace "<client_instance>", "ClientName"} | set-content "$destinationpath\$($file.basename)"
    }
    

    您可能需要在这里和那里进行调整以满足您的需求。

    【讨论】:

    • 这行得通。谢谢你。我只需要为目标文件类型添加“.bat”。我可以在 3 分钟内接受你的回答。
    • 为什么需要更改为Out-File?你可以很容易地做到Set-Content "$destinationpath\$($file.basename)"。重点是Get-Content $_ | ... | Set-Content $_ 覆盖了源文件。
    • 我绝对不想替换原始文件。我想用替换的值创建一个副本。
    • @BACON 你完全正确,我不知何故从字面上理解了“更改集内容”。编辑了我的答案以更简洁地更改必须更改的内容。
    • @RJ。正确的。您使用的Set-Content $_ 的问题不是Set-Content,而是为-Path 参数传递的值$_
    猜你喜欢
    • 2022-01-25
    • 2021-06-01
    • 2014-02-28
    • 2019-06-18
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    相关资源
    最近更新 更多