2012-02-22 26 views
9

Me gustaría llamar al script B desde el script A sin especificar la ruta completa. He tratado conCómo puedo llamar a un archivo desde la misma carpeta en la que me encuentro (en script)

.\scriptb.ps1 

pero que no funciona. ¿Realmente tengo que especificar la ruta completa?

(lo siento por esta pregunta bastante básica, pero Google no podían ayudarme!)

+0

puede proporcionar un poco más de información: ¿Cómo se llama la escritura A? ¿Hay algo en Script A posiblemente cambiando tu ubicación actual? –

Respuesta

8

es posible utilizar $MyInvocation de la siguiente manera:

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

Gracias. Así es como lo hice en el pasado, ¡pero pensé que había una mejor manera! $ workingdir = Split-Path $ MyInvocation.MyCommand.Path -Parent \t #Obtener el directorio de trabajo actual . $ workingdir \ functions.ps1 – Sune

+0

ya que. \ scriptb.ps1 solo incluye su sigue siendo completamente dependiente de donde se llama. Sé que es feo :) –

+0

¿Por qué Microsoft tiene que hacer que todo sea tan complicado? –

0

. \ Es la ruta relativa. Es relativo a donde estás actualmente. Por ejemplo, si está en c: \, pero invocando script d: \ 1.ps1, entonces. \ Será drive c:

. Hay algunos trucos más. Puede cambiar su ubicación de la secuencia de comandos, utilizando un cd, por ejemplo,

. \ Funcionará como usted lo desee si va a la ubicación donde está físicamente el archivo y lo ejecuta desde allí.

3

¿Qué tal esto:

& $pwd\scriptb.ps1 
+0

Entonces, ¿puedes hacer esto dentro de un script? – Sune

+0

Lo siento, he entendido mal la pregunta. Publicado una nueva respuesta. – mjolinor

0

Dentro de su principal guión, guión R:

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

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

$result = . $utilityScript "SomeParameter" 
6

utilizo el variable powershell que tiene un nombre fácil de recordar lo que siéntate para.

$PSScriptRoot\scriptb.ps1 
0

He llegado a esta pregunta, después descubrí que la ejecución de un script de PowerShell desde un archivo por lotes produjo fracaso de "incluye" como .\config.ps1.

Una manera de hacer que funcione es:

$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 
Cuestiones relacionadas