如何在不显着增加文件大小的情况下在 PowerShell 中保存文本文件?
How do I save a text file in PowerShell without drastically increasing its size?
我有一个 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 之外,我还需要确保它是一个基本文本文件吗?
啊我找到答案了
我的 Out-File
行需要 -Encoding Default
标记。
呸
我建议你总是像这样重写你的文件:
$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 脚本,它可以将文本添加到行中,或者在文件为空时创建行,但是它会使文件无效(它应该是一个简单的文本文件,但具有自定义扩展名“.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 之外,我还需要确保它是一个基本文本文件吗?
啊我找到答案了
我的 Out-File
行需要 -Encoding Default
标记。
呸
我建议你总是像这样重写你的文件:
$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
}