所以我一直在用powershell写一个脚本,我想做一些修改,让人们可以用最少的努力来使用它。其中一部分包括调整脚本,以便将路径中我的用户名的实例替换为$env:USERNAME
。
例如:C:Users{username}Downloadsexecutable.exe
变成C:Users$env:USERNAMEDownloadsexecutable.exe
,结果是一样的。
我反复得到错误The term 'C:Users$env:USERNAMEDownloadsexecutable.exe' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
当我调用它作为分配变量的一部分时,我得到The term C:Users{username}Downloadsexecutable.exe is not ...
,所以在这种情况下路径被正确处理。
我以前在bash的路径中使用过变量,没有问题,所以我不确定我在哪里出错了。
我试过将它分配给一个变量并调用它,并分配$env:USERNAME
并在路径中包含该变量,但都没有工作。
我也试过使用$env:HOMEPATH
。
我已经尝试将变量分配为字符串(带双引号),并使用Invoke-command $command
和Invoke-Expression $command
,但没有骰子。
我如何执行一个脚本或可执行文件在路径名中有一个变量?这在powershell中可能吗?
Mathias R. Jensen的回答修复了我的问题,我的代码现在可以工作了。
#Constructed path as advised
$TestPath = Join-Path $env:USERPROFILE Downloadsexecutable.exe
Get-date | Out-File -FilePath $env:USERPROFILEtesttestfile.txt -Append
#Invoked executable
& $TestPath | Out-File -FilePath $env:USERPROFILEtesttestfile.txt -Append
对于构建相对于用户配置文件文件夹的路径,使用$env:USERPROFILE
,并将操作分为两个单独的步骤:
- 构建可执行文件路径
- 使用
&
呼叫操作符调用:
# Construct path
$exePath = Join-Path $env:USERPROFILE 'Downloadsexecutable.exe'
# Invoke executable
& $exePath