我想從腳本A調用腳本B而不指定完整路徑。 我試過如何從我在同一個文件夾中調用文件(在腳本中)
.\scriptb.ps1
但這並不起作用。 我真的必須指定整個路徑嗎?
(對不起,這個很基本的問題,但谷歌不能幫助我!)
我想從腳本A調用腳本B而不指定完整路徑。 我試過如何從我在同一個文件夾中調用文件(在腳本中)
.\scriptb.ps1
但這並不起作用。 我真的必須指定整個路徑嗎?
(對不起,這個很基本的問題,但谷歌不能幫助我!)
可以使用$MyInvocation
如下:
$executingScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$scriptPath = Join-Path $executingScriptDirectory "scriptb.ps1"
Invoke-Expression ".\$scriptPath"
謝謝。這就是我過去所做的,但我認爲還有更好的辦法! $ workingdir =拆分路徑$ MyInvocation.MyCommand.Path -Parent \t#獲取當前工作目錄 。 $ workingdir \ functions.ps1 – Sune 2012-02-22 12:56:53
因爲。\ scriptb.ps1只是包含它仍然完全依賴於從哪裏調用。我知道這很難看:) – 2012-02-22 15:29:45
爲什麼微軟必須讓所有事情變得如此複雜? – 2017-11-19 19:12:18
。\是相對路徑。這與你現在的位置有關。例如,如果您在c:\中,但是調用腳本d:\ 1.ps1,那麼\將會是驅動器c:
還有一些技巧。你可以用腳本來改變你的位置,例如使用cd
。\將按照你想要的方式工作,如果你將要去物理位置,並從那裏運行它。
您主要腳本,腳本A內:
$thisScriptDirectoryPath = Split-Path -parent $MyInvocation.MyCommand.Definition
$utilityScriptName = "ScriptB.ps1"
$utilityScript = (Join-Path $thisScriptDirectoryPath $utilityScriptName)
$result = . $utilityScript "SomeParameter"
我使用有一個簡單的名字記住我什麼的PowerShell變量這是爲了。
$PSScriptRoot\scriptb.ps1
我臨到這個問題,之後我發現,從批處理文件執行PowerShell腳本製作的「包括」像.\config.ps1
失敗。
一種方法是:
$configFullPath = "$($pwd)\config.ps1"
Write-Host "Config file full path = $configFullPath"
#force is required just to make sure that module is not used from cache
Import-Module -Force $configFullPath
能提供更多的信息:你是如何調用腳本阿?腳本A中的任何內容可能會改變您的當前位置? – 2012-02-22 13:43:42