2010-10-03 24 views
6

En mi script bat, llamaré a otro guión y haciéndola pasar un parámetro de cadena.bat nombre de la carpeta actual

cscript log.vbs "triggered from folder <foldername> by Eric" 

El parámetro de cadena como se puede ver contiene el nombre de la carpeta de la que el guión es siendo llamado. ¿Cuál es la forma correcta de pasar esto de forma dinámica insertar este nombre de carpeta en el script?

Respuesta

18

Si desea que el directorio en el que está actualmente en el, se puede conseguir eso de %cd%. Ese es su directorio de trabajo actual.

Si vas a ser cambiar el directorio de trabajo actual durante la ejecución del script, simplemente guardarlo en el inicio:

set startdir=%cd% 

continuación, puede utilizar %startdir% en el código independientemente de los cambios más adelante encendido (que afecta %cd%).


Si lo que desea es obtener la última componente de esa ruta (como por su comentario), puede utilizar lo siguiente como una línea de base:

 
    @setlocal enableextensions enabledelayedexpansion 
    @echo off 
    set startdir=%cd% 
    set temp=%startdir% 
    set folder= 
:loop 
    if not "x%temp:~-1%"=="x\" (
     set folder=!temp:~-1!!folder! 
     set temp=!temp:~0,-1! 
     goto :loop 
    ) 
    echo.startdir = %startdir% 
    echo.folder = %folder% 
    endlocal && set folder=%folder% 

Este salidas:

 
    C:\Documents and Settings\Pax> testprog.cmd 
    startdir = C:\Documents and Settings\Pax 
    folder = Pax 

Funciona copiando los caracteres del final de la ruta completa, uno a la vez, hasta que encuentra el separador \. No es ni muy ni eficiente, pero la programación por lotes de Windows rara vez es :-)

EDITAR

En realidad, no es un método sencillo y muy eficiente para conseguir el último nombre del componente.

for %%F in ("%cd%") do set "folder=%~nxF" 
No

un problema para esta situación, pero si se trata de una variable que contiene un camino que puede o no puede terminar con \, entonces se puede garantizar el resultado correcto añadiendo \.

for %%F in ("%pathVar%\.") do set "folder=%~nxF" 
+1

@Berming, he agregado un código que le dará el último componente de la ruta. Ver la actualización – paxdiablo

+0

Justo lo que necesitaba, muchas gracias. Sin embargo, noté que cuando 'endlocal' no puedo acceder a la variable' folder' después de eso, entonces saqué esa línea. Pensé que ya que quité esa línea, también debería eliminar '@setlocal enableextensions enabledelayedexpansion' en la parte superior, pero quitar esa línea causaba problemas, así que guardé esa. – Berming

+2

@Berming, mira la actualización. Si deja el 'endlocal', lo afectará más tarde.Todavía puede usar 'setlocal/endlocal' para asegurarse de que la expansión diferida funciona, pero modifique' endlocal' a 'endlocal && set folder =% folder%' para que la variable 'folder' se escape. – paxdiablo

8
+1

Esto proporciona la carpeta donde está almacenado el script bat, que puede o no ser el mismo desde el que se llama el script, por lo que no funciona en mi caso, porque casi siempre se llama desde una ubicación diferente que es diferente desde donde se almacena el script en realidad. – Berming

+1

¡Correcto! Lo siento. De acuerdo, dejaré esta respuesta aquí como referencia: alguien puede encontrar '% ~ dp0' útil para ciertos fines. – Isaac

Cuestiones relacionadas