如何在PowerShell中更改为临时目录?

Iai*_*der 3 powershell temp

在PowerShell中,我可以回应%TEMP%使用该命令的价值$Env:TEMP.这是我机器上的输出:

PS> $Env:temp
C:\Users\IAIN~1.COR\AppData\Local\Temp
Run Code Online (Sandbox Code Playgroud)

当我尝试使用该cd命令切换到目录时,收到此错误:

PS> cd $Env:temp
Set-Location : An object at the specified path C:\Users\IAIN~1.COR does not exist.
At line:1 char:3
+ cd <<<<  $Env:temp
    + CategoryInfo          : InvalidArgument: (:) [Set-Location], PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.SetLocationCommand
Run Code Online (Sandbox Code Playgroud)

我怀疑PowerShell正在解释8.3文件名.目录的长文件名是C:\Users\iain.CORP\AppData\Local\Temp.当我尝试时cd C:\Users\Iain.CORP\AppData\Local\Temp,目录成功更改.

如何在$Env:TEMP使用PowerShell时打开路径?我必须先拥有长文件名吗?

Iai*_*der 10

您不需要%TEMP%直接访问环境变量.

.NET提供了一种GetTempPath方法作为更通用的解决方案.

$TempDir = [System.IO.Path]::GetTempPath()
cd $TempDir
Run Code Online (Sandbox Code Playgroud)

在我的机器上,这会更改为目录C:\Users\Iain.CORP\AppData\Local\Temp.

文件备注:

此方法按以下顺序检查环境变量是否存在,并使用找到的第一个路径:

  1. TMP环境变量指定的路径.

  2. TEMP环境变量指定的路径.

  3. USERPROFILE环境变量指定的路径.

  4. Windows目录.

感谢Joe Angley分享这项技术.


小智 8

cd $env:temp

这对我有用。

  • 正如我在问题中所演示的,这在我的环境中失败了。它会返回给你什么?我认为此方法在 `$Env:TEMP` 返回 [8.3 文件名](http://support.microsoft.com/kb/142982) 而不是长文件名的环境中会失败。 (2认同)

jon*_*n Z 7

$env:temp通过首先解析其全名来打开,如下所示:

cd (gi $env:temp).fullname
Run Code Online (Sandbox Code Playgroud)