【问题标题】:How do I save a text file in PowerShell without drastically increasing its size?如何在不大幅增加其大小的情况下在 PowerShell 中保存文本文件?
【发布时间】:2021-03-09 20:55:29
【问题描述】:

我有一个 PowerShell 脚本,可以将文本添加到行中,或者在文件为空白时创建行,但是它会使文件无效(应该是一个简单的文本文件,但具有自定义扩展名“.env”) 我的代码如下所示:

$menvs = @()
$paths = @()
Get-ChildItem -Path c:\Users\$env:UserName\Documents\maya\ -filter Maya.env -Recurse | % {
     $menvs = $menvs + $_.FullName
}

Foreach($fl in $menvs){
    if ((Get-Content $fl) -eq $null){
        $paths = @("MAYA_SCRIPT_PATH = P:/InProd/tools/maya/mel;P:/InProd/tools/maya/mel/nativeMaya",
                        "XBMLANGPATH = P:/InProd/tools/maya/icons",
                        "MAYA_PLUG_IN_PATH = P:/InProd/tools/maya/plugins",
                        "PYTHONPATH = P:/InProd/tools/maya/python")
    }
    else {
        $paths = Get-Content $fl
        for ($i = 0; $i -lt $paths.Length; $i++){
            if ($paths[$i] -match "MAYA_SCRIPT_PATH"){
                $paths[$i] = $paths[$i] +";P:/InProd/tools/maya/mel;P:/InProd/tools/maya/mel/nativeMaya"
            }
            if ($paths[$i] -match "XBMLANGPATH"){
                $paths[$i] = $paths[$i] +";P:/InProd/tools/maya/icons"
            }
            if ($paths[$i] -match "MAYA_PLUG_IN_PATH"){
                $paths[$i] = $paths[$i] +";P:/InProd/tools/maya/plugins"
            }
            if ($paths[$i] -match "PYTHONPATH"){
                $paths[$i] = $paths[$i] +";P:/InProd/tools/maya/python"
            }
        }
    }
    if($paths){
        $paths | Out-File $fl
        "paths updated in $fl"
    }
}

它可以很好地写入输入,我可以在任何文本编辑器中读取它,但我注意到文件大小比我刚刚通过文本编辑器手动输入信息大 4*,也是这个文件的应用程序不再读取它,它识别出文件在那里,但不再尝试读取它。 我错过了什么吗?除了 Out-File 之外,我还需要确保它是一个基本的文本文件吗?

【问题讨论】:

    标签: powershell debugging text save write


    【解决方案1】:

    我建议您始终像这样重写您的文件:

    $Content =@"
    MAYA_SCRIPT_PATH =P:/InProd/tools/maya/mel;P:/InProd/tools/maya/mel/nativeMaya
    XBMLANGPATH = P:/InProd/tools/maya/icons
    MAYA_PLUG_IN_PATH = P:/InProd/tools/maya/plugins
    PYTHONPATH = P:/InProd/tools/maya/python
    "@
    
    Get-ChildItem -Path "c:\Users\$env:UserName\Documents\maya\" -file -filter Maya.env -Recurse | %{
        Set-Content -Path $_.FullName -Value $Content -Encoding Default
        "paths updated in " + $_.FullName 
    }
    

    【讨论】:

    • 这很优雅,我必须记住,如果已经设置了某些内容,则不要覆盖已经存在的内容,只需追加(另外我是 PowerShell 的菜鸟)。
    【解决方案2】:

    啊,我找到了答案here

    需要我的Out-File 行上的-Encoding Default 标志。 唷。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多