【问题标题】:Change encoding and extension of files within a directory using powershell使用 powershell 更改目录中文件的编码和扩展名
【发布时间】:2018-10-31 11:17:12
【问题描述】:

我一直在尝试编写一个脚本来更改特定目录中一组文件的文件编码和文件扩展名,但无济于事。到目前为止,get-content 和 set-content 方法一直在工作,但仅适用于单个文件(还没有让它循环)。

get-content testdocument.txt | set-content -encoding utf8 "testdocument.xml" 
#works!

$a = dir |
    $a foreach-object |
        get-content | set-content -encoding utf8 $a_fullname.xml
#doesn't work =(

我在 rename-item cmdlet 方面也取得了成功(有限)。我可以重命名目录中的所有项目,但无法更改编码。

get-childitem *.txt | rename-item -newname {$_.name -replace '.txt','.xml'} 
#works!

get-childitem *.txt | rename-item -newname {$_.name -replace '.txt','.xml'} | -encoding utf8
#doesn't work =(

任何帮助将不胜感激。如果这个问题看起来微不足道,我深表歉意(通常是 Powershell/脚本的新手,也是第一次发布)。提前致谢!

【问题讨论】:

    标签: xml powershell loops


    【解决方案1】:

    对于您的循环,您需要将命令模块化到可以引用它们并正确调用它们的位置。在您的情况下,您需要调用“baseName”并将“.xml”附加到您的原始命令中,而不是调用“fullName”属性。之后,只需在 ForEach 循环的正确位置使用正确的变量即可。

    $a = Get-ChildItem
    ForEach ($item in $a) {
      Get-Content $item.FullName | Set-Content -Encoding utf8 "$($item.Basename).xml"
    }
    

    这将允许您将原始文件放在具有适当编码的新 xml 文件旁边。

    【讨论】:

    • 完美运行!非常感谢布莱斯的帮助和很好的解释。希望你有一个美好的一周!
    • 谢谢@MrShakur 和你。如果您不介意将答案标记为正确(如果您有权限,请对其进行投票),我将不胜感激。答案分数的左侧应该有一个绿色的检查图像。
    • @TheIncorrigible1 来解决这个问题,我们只需将路径放在$a = Get-ChildItem 行的末尾
    • 这不是它不起作用的原因。您正在引用$item.BaseName,如果它没有完全限定的路径,它将使用$pwd
    【解决方案2】:

    为了解决您的问题,您的大多数命令都使用了错误的语法。我建议查看Get-Command -Name Get-Help -SyntaxGet-Help -Name Get-Command(将-Name 替换为您正在使用的cmdlet)。

    1. Rename-Item 仅用于重命名.. 项目。它不会改变编码。

    2. ForEach-Object 用于两个原因,迭代集合并获取成员的值,或执行每个项目的操作。在你的情况下:

    Get-ChildItem -Path 'C:\myfiles' | ForEach-对象 { # 用括号括起来防止文件锁定 (获取内容-路径 $_.FullName)| Set-Content -Path $_.FullName -Encoding UTF8 重命名项目 -NewName "$($_.BaseName).xml" -Path $_.FullName }

    【讨论】:

    • 感谢@theIncorrigible1 提供更多见解。我非常感谢您抽出时间提供帮助。我会做一些关于如何使用正确语法的功课,以便将来更好地理解事物。保重!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2016-09-12
    • 2011-07-12
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多