我有以下目录树:
e:\powershell\services\This-Script-Here-Should-Call-Press any key to continue.ps1
e:\powershell\utils\Press any key to continue.ps1
现在我想调用一个名为“按任意键继续.ps1”的脚本,它位于“utils”文件夹中,来自我在“services”文件夹中的脚本。我怎么做?我无法弄清楚相对路径。
我试着这样做:
"$ '.\..\utils\Press any key to continue.ps1'"
但它不起作用。
答案 0 :(得分:31)
根据您的操作,以下内容应该有效:
& "..\utils\Press any key to continue.ps1"
或
. "..\utils\Press any key to continue.ps1"
(查找使用&
和.
之间的区别并决定使用哪一个
这就是我处理这种情况的方式(和@Shay提到的略有不同):
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$utilsDir = Join-Path -Path $scriptDir -ChildPath ..\utils
& "$utilsDir\Press any key to continue.ps1"
答案 1 :(得分:8)
将以下函数放入调用脚本中以获取其目录路径并将utils路径与脚本名称一起加入:
# create this function in the calling script
function Get-ScriptDirectory { Split-Path $MyInvocation.ScriptName }
# generate the path to the script in the utils directory:
$script = Join-Path (Get-ScriptDirectory) 'utils\Press any key to continue.ps1'
# execute the script
& $script
答案 2 :(得分:1)
要获取当前脚本路径,可以使用 $PSScriptRoot 变量。例如 以下是结构: 解决方案\mainscript.ps1 解决方案\secondscriptfolder\secondscript.ps1
#mainscript.ps1
$Second = Join-Path $PSScriptRoot '\secondscriptfolder\secondscript.ps1'
$Second
答案 3 :(得分:0)
非常感谢你的信息。 我有类似的问题,我可以这样工作,从父文件夹调用其他脚本。
$CommandPath = (Get-Location).Path | Split-Path -Parent; $script = "$CommandPath\Logins\Login_SSI_SST_exch2010_DKSUND_Exchange365.ps1"; & $script