为什么 PowerShell 会在此命令中的 %USERPROFILE% 前面插入当前工作目录路径?

为什么 PowerShell 会在此命令中的 %USERPROFILE% 前面插入当前工作目录路径?

情况如下:

PS C:\Users\user> copy %USERPROFILE%\AppData\Local\Thing %USERPROFILE%\AppData\Local\Thing.backup


copy : Cannot find path 'C:\Users\user\%USERPROFILE%\AppData\Local\Thing' because it does not 
exist.
At line:1 char:1
+ copy %USERPROFILE%\AppData\Local\Thing %USERPROFILE%\AppData\ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Users\user...\Thing:String) [Copy-Item], ItemN 
   otFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand

它在文字 %USERPROFILE% 前面插入扩展的 %USERPROFILE%。

它在做什么?我该如何阻止它?

答案1

在 powershell 中你需要使用$env:UserProfile

copy "$($env:USERPROFILE)\AppData\Local\Thing" "$($env:USERPROFILE)\AppData\Local\Thing.backup"
  • 要将字符串与变量连接起来,您需要使用自我表达运算符$()
  • 实际上copy是 powershell Cmdlet 的别名Copy-Item

旁注:如果您需要使用文字,'%USERPOFILE%'则使用-LiteralPath或使用单引号。

相关内容