我有一个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之外,我还需要确保它是一个基本的文本文件吗?
发布于 2020-11-27 10:06:17
我建议你总是像这样重写你的文件:
$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
}发布于 2020-11-27 10:04:41
啊哈我找到答案了here
我的Out-File线路上需要-Encoding Default标志。呼。
https://stackoverflow.com/questions/65031161
复制相似问题