使用变量作为参数工作,使用变量源失败

时间:2016-08-31 13:46:34

标签: powershell

我找到了将当前工作目录放入$ dp0的方法。

PS C:\src\powershell> Get-Content .\curdir2.ps1
$dp0 = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)

Set-Location -Path $dp0
Write-Host "location is set"

Set-Location -Path [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)

Write-Host (Get-Location).Path

为什么当我尝试使用与Set-Location的参数相同的方式时,这是一个错误?我认为这可能是Powershell中对象的基础。我需要知道什么?

Set-Location : A positional parameter cannot be found that accepts argument 'C:\src\powershell\curdir2.ps1'.
At C:\src\powershell\curdir2.ps1:6 char:1
+ Set-Location -Path [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.De ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Set-Location], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

1 个答案:

答案 0 :(得分:2)

使用括号。
正如您在PS ISE中看到的那样,整个参数被解释为文字字符串 并且始终使用-LiteralPath而不是-Path来正确处理带有[]括号的目录。

Set-Location -LiteralPath ([IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition))

PS3.0 +:cd -LiteralPath $PSScriptRoot