ruta relativa en el script BAT


130

Aquí está mi propia carpeta de programa en mi unidad USB:

Program\
     run.bat
     bin\
         config.ini
         Iris.exe
         library.dll
         etc.

Me gustaría usar run.batpara comenzar Iris.exe

No puedo usar esto: F:/Program/bin/Iris.execomo un acceso directo, porque a veces no se adjunta como unidad F:( por ejemplo, E: o G:)

¿Qué necesito escribir en el archivo bat para trabajar independientemente de la letra de la unidad?

Intenté esto en el archivo BAT:

"\bin\Iris.exe"

Pero no funciona.

Respuestas:


275

Use esto en su archivo por lotes:

%~dp0\bin\Iris.exe

%~dp0 se resuelve en la ruta completa de la carpeta en la que reside el script por lotes.


77
En realidad, esto se resuelve en algo como C:\myDir\\bin\Iris.exe(tenga en cuenta la doble barra invertida). ¿Esto todavía funciona pero dejando de lado la barra invertida antes de que bin parezca "más limpio"? -> %~dp0bin\Iris.exe.
— mozzbozz

8
@mozzbozz Si puede garantizar que %~dp0siempre tendrá una barra invertida final, ambas declaraciones funcionarán. De lo contrario, el que tiene la barra diagonal inversa adicional es la variante más segura.
— Ansgar Wiechers

44
Ok, ese es un punto. Solo he probado esto en dos máquinas con Windows 7 diferentes, podría ser diferente en otros lugares (XP, Vista o Windwos 8 -> No lo sé pero: lógica de Microsoft y no pude encontrar ningún documento al respecto;)). Sin embargo, descubrí que tenía que poner comillas alrededor ( "%~dp0\bin\Iris.exe") ya que la ruta tenía un espacio en blanco :) Solo para estar realmente seguro de que funciona en todas las computadoras.
— mozzbozz

1
puede asegurarse de que haya una barra diagonal inversa con SET "scriptdir=%~dp0"y en la siguiente línea IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\". He visto incidentes en los que la doble barra diagonal inversa en el medio del camino rompe el software.
— LogicDaemon

40

Puede obtener todas las propiedades de archivo requeridas utilizando el siguiente código:

FOR %%? IN (file_to_be_queried) DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Parent Folder        : %%~dp?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)

24

He descubierto que %CD%proporciona la ruta desde la que se llamó el script y no la ruta del script, sin embargo, %~dp0dará la ruta del script en sí.


14

Debería poder usar el directorio actual

"% CD%" \ bin \ Iris.exe


1
Esto falla cuando el directorio actual no lo es Program, esto sucederá cuando haga doble clic run.baten el explorador. %CD%es el directorio actual %~dp0es el directorio del archivo por lotes en sí mismo
— jeb

5

ya sea bin\Iris.exe (sin barra inclinada, porque eso significa comenzar desde la raíz)
o \Program\bin\Iris.exe(ruta completa)


1
bin \ Iris.exe no funciona :( No me gusta usar root, porque algún día tal vez mueva este directorio a otra ubicación. ¿Y si le pregunto al sistema operativo la ruta absoluta actual? y usaré que iniciar exe en bin?
— user2083037

Supuse que la unidad actual sería la unidad de memoria USB y la carpeta actual sería \Program, ¿no es así? Puede mostrar eso con un simple cdcomando en la línea antes de intentar ejecutar el .exe
— AjV Jsy

Simplemente usar una ruta relativa no necesariamente funcionará. La ruta será relativa al directorio de trabajo actual, que puede ser diferente del directorio principal de run.bat.
— Ansgar Wiechers
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.