2012-02-22 26 views
9

我想從腳本A調用腳本B而不指定完整路徑。 我試過如何從我在同一個文件夾中調用文件(在腳本中)

.\scriptb.ps1 

但這並不起作用。 我真的必須指定整個路徑嗎?

(對不起,這個很基本的問題,但谷歌不能幫助我!)

+0

能提供更多的信息:你是如何調用腳本阿?腳本A中的任何內容可能會改變您的當前位置? – 2012-02-22 13:43:42

回答

8

可以使用$MyInvocation如下:

$executingScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent 
$scriptPath = Join-Path $executingScriptDirectory "scriptb.ps1" 
Invoke-Expression ".\$scriptPath" 
+0

謝謝。這就是我過去所做的,但我認爲還有更好的辦法! $ workingdir =拆分路徑$ MyInvocation.MyCommand.Path -Parent \t#獲取當前工作目錄 。 $ workingdir \ functions.ps1 – Sune 2012-02-22 12:56:53

+0

因爲。\ scriptb.ps1只是包含它仍然完全依賴於從哪裏調用。我知道這很難看:) – 2012-02-22 15:29:45

+0

爲什麼微軟必須讓所有事情變得如此複雜? – 2017-11-19 19:12:18

0

。\是相對路徑。這與你現在的位置有關。例如,如果您在c:\中,但是調用腳本d:\ 1.ps1,那麼\將會是驅動器c:

還有一些技巧。你可以用腳本來改變你的位置,例如使用cd

。\將按照你想要的方式工作,如果你將要去物理位置,並從那裏運行它。

3

如何:

& $pwd\scriptb.ps1 
+0

所以你可以在腳本中做到這一點? – Sune 2012-02-22 12:56:02

+0

對不起,誤解了這個問題。發表了一個新的答案。 – mjolinor 2012-02-22 13:26:18

0

主要腳本,腳本A內:

$thisScriptDirectoryPath = Split-Path -parent $MyInvocation.MyCommand.Definition 

$utilityScriptName = "ScriptB.ps1" 
$utilityScript = (Join-Path $thisScriptDirectoryPath $utilityScriptName) 

$result = . $utilityScript "SomeParameter" 
6

我使用有一個簡單的名字記住我什麼的PowerShell變量這是爲了。

$PSScriptRoot\scriptb.ps1 
0

我臨到這個問題,之後我發現,從批處理文件執行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 
相關問題