请帮我处理 PowerShell 环境变量。
我了解到 PowerShell 具有访问系统环境变量值的特殊语法。因此我尝试执行:
$env:Temp
在 Windows 10 上的 PowerShell 6.2.4 控制台中。输出很奇怪:
C:\Users\OD42B~1.BOR\AppData\Local\Temp
它将我的 Windows 用户名缩短为 8.3 格式。问题是我无法使用该cd $env:temp
命令,它显示以下错误:
cd : An object at the specified path C:\Users\OD42B~1.BOR does not exist.
但我可以cd %temp%
在cmd
终端上执行。
我尝试过 Windows PowerShell 应用程序(%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
),但cd $env:Temp
也没有用。
我已经检查了环境变量配置选项(系统属性\环境变量),并且TEMP
和TMP
变量都使用长格式的配置文件文件夹名称显示,例如c:\users\o.borolongprofilename\AppData\Local\Temp
。
如何cd $env:Temp
在 PowerShell 中使非 8.3 配置文件名称起作用?
更新型多巴胺
PowerShell
get-childitem env:Temp
输出是C:\Users\OD42B~1.BOR\AppData\Local\Temp
。Cmd
echo %temp%
输出相同C:\Users\OD42B~1.BOR\AppData\Local\Temp
(但cd %temp%
在 cmd 中有效)。TEMP
UI 中的环境变量设置正确(显示的值如下c:\users\o.borolongprofilename\AppData\Local\Temp
)。但是当我尝试使用 UI进行编辑时
TEMP
,会显示相应的值。%USERPROFILE%\AppData\Local\Temp
TEMP
PowerShell
get-childitem env:userprofile
显示全名如c:\users\o.borolongprofilename
(惊讶)。
UPD2
我刚刚检查了 PowerShell 7 rc2,但结果是一样的:cd $env:Temp
不起作用。
UPD3
谢谢你的帮助。我已经找到答案由@Smock评论链接提供:
cd (gi $env:temp).fullname
答案1
谢谢你的帮助。我发现答案由@Smock评论链接提供:
cd (gi $env:temp).fullname
答案2
我不知道是什么原因造成的,但你可以在你的个人资料中添加一小段 powershell:
$env:TEMP = [Environment]::GetEnvironmentVariable("Temp", [EnvironmentVariableTarget]::User)
这样,$env:Temp
每次启动 PowerShell 时都会更新
答案3
您还可以从注册表值中获取路径并使用它:
但不要使用这个:HKCU\Environment
[HKCU:\Environment]
@TEMP=%USERPROFILE%\AppData\Local\Temp
TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp
输出还附带:
%USERPROFILE%
, 所以....
...尝试使用此注册表项:HKCU\Environment
[HKCU:\Volatile Environment]
@LOCALAPPDATA=C:\Users\ecker\AppData\Local
LOCALAPPDATA REG_SZ C:\Users\ecker\AppData\Local
并且仅将输出序列与以下内容连接:TEMP
==>
"$path_str\TEMP"
$path_str = (Get-ItemProperty "HKCU:\Volatile Environment")|Select-Object -ExpandProperty LOCALAPPDATA | Resolve-path ; cd "$path_str\TEMP"
# Or using aliases #
$path_str = (gp "HKCU:\Volatile Environment")|select -ExpandProperty LOCALAPPDATA | rvpa ; cd "$path_str\TEMP"