如何从我所在的同一文件夹中调用文件(在脚本中)

时间:2012-02-22 12:34:36

标签: powershell

我想从脚本A调用脚本B而不指定完整路径。 我试过

.\scriptb.ps1

但这不起作用。 我真的必须指定整个路径吗?

(抱歉这个非常基本的问题,但谷歌无法帮助我!)

9 个答案:

答案 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