我找到了将当前工作目录放入$ 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
答案 0 :(得分:2)
使用括号。
正如您在PS ISE中看到的那样,整个参数被解释为文字字符串
并且始终使用-LiteralPath
而不是-Path
来正确处理带有[]
括号的目录。
Set-Location -LiteralPath ([IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition))
PS3.0 +:cd -LiteralPath $PSScriptRoot