我想从脚本A调用脚本B而不指定完整路径。 我试过
.\scriptb.ps1
但这不起作用。 我真的必须指定整个路径吗?
(抱歉这个非常基本的问题,但谷歌无法帮助我!)
答案 0 :(得分:15)
我使用powershell变量,它有一个简单的名称来记住它的用途。
import requests
import requests_mock
session = requests.Session()
adapter = requests_mock.Adapter()
session.mount('mock', adapter)
adapter.register_uri('GET', 'mock://test.com', text='mocked')
params = {'foo': 'bar'}
session.get('mock://test.com', params=params)
print(adapter.request_history[0].qs) # prints {}
答案 1 :(得分:9)
可以使用$MyInvocation
,如下所示:
$executingScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$scriptPath = Join-Path $executingScriptDirectory "scriptb.ps1"
Invoke-Expression ".\$scriptPath"
答案 2 :(得分:4)
这个怎么样:
& $pwd\scriptb.ps1
答案 3 :(得分:0)
。\是相对路径。它与您目前所处的位置有关。例如,如果你在c:\,但是调用脚本d:\ 1.ps1,那么。\将是驱动器c:
还有一些技巧。您可以使用cd替换脚本中的位置,例如
。\会像你想要的那样工作,如果你要去文件的物理位置并从那里运行它。
答案 4 :(得分:0)
在主脚本中,脚本A:
$thisScriptDirectoryPath = Split-Path -parent $MyInvocation.MyCommand.Definition
$utilityScriptName = "ScriptB.ps1"
$utilityScript = (Join-Path $thisScriptDirectoryPath $utilityScriptName)
$result = . $utilityScript "SomeParameter"
答案 5 :(得分: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
答案 6 :(得分:0)
在PS 3及更高版本中,使用$PSScriptRoot
变量:
& $PSScriptRoot\config.ps1
答案 7 :(得分:0)
Payette的书《行动中的时髦》(Posh in Action)说这可行:${c:File.txt}
他将其描述为:
“从当前工作中返回文件File.txt的内容 C:驱动器上的目录。”
相反,${c:\File.txt}
说,
“从C:驱动器的根目录获取文件File.txt。”
哪个适用于Windows。我在Linux上并试图找出如何解决同样的问题。
很高兴能将Powershell重新带回我的生活。
答案 8 :(得分:0)
你快到了。
?您所做的事情:
.\scriptb.ps1
?将会做什么:
. .\scriptb.ps1