2011-09-11 7 views
13

tengo el siguiente árbol de directorios:¿Cómo llamo a otra secuencia de comandos de PowerShell con una ruta relativa?

e:\powershell\services\This-Script-Here-Should-Call-Press any key to continue.ps1 
e:\powershell\utils\Press any key to continue.ps1 

y ahora me gustaría llamar a un script llamado "Pulse cualquier tecla para continue.ps1" que se encuentra en el -folder "utilidades" de un guión que me tener en la carpeta "servicios". ¿Cómo puedo hacer eso? No puedo entender la ruta relativa.

Traté de hacerlo de esta manera:

"$ '.\..\utils\Press any key to continue.ps1'" 

pero no funcionó.

+0

Posible duplicado: http://stackoverflow.com/q/6816450/2291 (aunque este no es específico para rutas relativas) –

Respuesta

21

Sobre la base de lo que estaba haciendo, lo siguiente debería funcionar:

& "..\utils\Press any key to continue.ps1" 

o

. "..\utils\Press any key to continue.ps1" 

(buscar la diferencia entre usar & y . y decidir cuál usar)

Éste es cómo manejar este tipo de situaciones (y ligera variación a lo @Shay mencionado):

$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path 
$utilsDir = Join-Path -Path $scriptDir -ChildPath ..\utils 

& "$utilsDir\Press any key to continue.ps1" 
+30

Un enlace para & y. hubiera sido bueno. No son exactamente expresiones de búsqueda amigables de Google. –

+4

En caso de que alguien más quiera entender el &, es un atajo para "Invocar-Expresión" - vea http://technet.microsoft.com/en-us/library/ee176880.aspx –

+10

para aquellos que todavía tienen problemas al intentarlo para encontrar la diferencia entre. y Y mira el siguiente blog: http://rkeithhill.wordpress.com/2007/11/24/effective-powershell-item-10-understanding-powershell-parsing-modes/ TL; DR ". " llama al script y se ejecuta en el ámbito actual "&" script y se ejecuta en un ámbito hijo diferente y se descarta – stanleykylee

5

Puy la función siguiente en la secuencia de comandos de llamada para obtener su ruta del directorio y unirse a la ruta de utilidades, junto con el nombre del script:

# create this function in the calling script 
function Get-ScriptDirectory { Split-Path $MyInvocation.ScriptName } 

# generate the path to the script in the utils directory: 
$script = Join-Path (Get-ScriptDirectory) 'utils\Press any key to continue.ps1' 

# execute the script 
& $script 
+0

hay dos problemas con esta solución: 1 ° - esto no es lo que intento lograr porque el directorio "ulits" no es un subdirectorio de "servicios" "y debo dejar" servicios "y luego ingresar" utilidades "para llamar al script correcto. 2nd - ScriptName-Property está vacío. He editado la pregunta para que quede más clara. – t3chb0t

+0

Realmente depende del directorio de trabajo de la consola (escriba pwd en su consola). Si desea utilizar rutas relativas, primero debe codificar en el directorio del script de origen y luego usar .. \ folder \ script.ps1. ¿Estás seguro de que Get-ScriptDirectory no devuelve la carpeta principal del script de llamada? –

+0

mi mal. Debo haber supervisado algo que funciona realmente la función Get-ScriptDirectory. – t3chb0t

Cuestiones relacionadas