如何在不大幅增加其大小的情况下在 PowerShell 中保存文本文件?

Posted

技术标签:

【中文标题】如何在不大幅增加其大小的情况下在 PowerShell 中保存文本文件?【英文标题】:How do I save a text file in PowerShell without drastically increasing its size? 【发布时间】: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 之外,我还需要确保它是一个基本的文本文件吗?

【问题讨论】:

【参考方案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 标志。 唷。

【讨论】:

以上是关于如何在不大幅增加其大小的情况下在 PowerShell 中保存文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不改变其位置的情况下在界面生成器中将子视图置于前面

如何在不使用css调整第一个图像大小的情况下在Wordpress页面上调整第二个图像的大小?

如何在不将其添加到目录的情况下在多个团队中安装机器人?

防止在不增加 SDK 版本的情况下在 MIUI 中强制暗模式

如何在不复制的情况下在多个进程中使用大型数据集?

如何在不缩放其内容的情况下调整 opengl 视口大小