【问题标题】:Overwrite all .txt files in folder recursively递归覆盖文件夹中的所有 .txt 文件
【发布时间】:2019-06-12 20:11:43
【问题描述】:

我可以在 PowerShell 中使用哪些代码来覆盖文件夹和子目录中所有 .txt 文件的内容?到目前为止,我尝试使用以下内容。

获取所有文本文件,包括子目录中的文件,并将它们存储在t变量中:

$t = get-childitem *txt -recurse

然后使用set-content cmdlet 写入所有文件

set-content $t -value 'hello'

但这似乎不起作用。请帮忙。

P.S:我是新手。

【问题讨论】:

  • 您可以直接通过管道:Get-ChildItem -Filter *.txt -Recurse | Set-Content 将自己的文件名设置为内容或应用值Get-ChildItem -Filter *.txt -Recurse | Set-Content -Value 'Hello'
  • 看看Get-Help Set-Content -Parameter Path - 你会注意到你使用的位置参数需要一个字符串并且你提供了一个文件信息对象。 [grin] 尝试将集合通过管道传输到 Set-Content 或使用 ForEach-Object 调用通过参数名称传递 `$_。
  • 好吧,上面问题中的代码确实有效,尽管效率很低,因为正如您所说的那样,参数是“字符串”提供的。 ForEach 对象会更好。感谢您的帮助。

标签: powershell


【解决方案1】:

不需要$t 变量。您可以使用管道:

Get-ChildItem -Filter *.txt -Recurse | Set-Content -Value 'Hello!'

这将使用Hello!填充您所在目录以及所有子目录中的所有文件

如果您出于某种原因需要进行处理并需要变量中的文件,您可以使用管道链或仅管道变量:

$t = Get-ChildItem -Filter *.txt -Recurse
# Do stuff with $t
$t | Set-Content -Value 'Hello!'

微软文档:

Set-Content

Get-ChildItem

【讨论】:

    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    相关资源
    最近更新 更多