Desde la línea de comando de Windows, si estoy en c:\foo y c:\bar está en mi RUTA.
¿Hay alguna forma de llamar a '\bin\myapp.exe' y hacer que busque mi ruta para invocar c:\bar\bin\myapp.exe?
¿Quizás un prefijo/variable de entorno o una utilidad estándar?
Creo que lo anterior funcionaría bien en un sistema Macos/linux (?) y funciona bien en Windows si no hubiera información de carpeta en el comando (es decir, c:\bar\bin está en la ruta y solo llamo a myappe.exe)
Actualizar-esto es para un script que no conoce el directorio de instalación (de terceros), solo sabe que el directorio base está en la ruta(y el nombre del archivo ejecutable es lo suficientemente único como para que sea poco probable que colisione con una aplicación con el mismo nombre). Probablemente podría escribir un script para encontrarlo (grep), esperaba que hubiera un truco fácil (opción cmd.exe, etc.) para permitir el nombre de la subcarpeta en el comando, similar a cómo lo permitiría Unix.
Respuesta1
LeerArgumentos de la línea de comando (parámetros)o call /?
:
… If Command Extensions are enabled CALL changes as follows: … In addition, expansion of batch script argument references (%0, %1, etc.) have been changed as follows: … %~$PATH:1 - searches the directories listed in the PATH environment variable and expands %1 to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string …
El
FOR
comando crea variables de parámetros que se identifican con una letra en lugar de un número (por ejemplo%%G
, ). Las expansiones de parámetros descritas anteriormente también se pueden aplicar a estos.
Aplicando lo anterior a su caso (tenga en cuenta el porcentaje duplicado %%g
por usar en un script .bat
o .cmd
):
for %%g in ("bin\myapp.exe") do @set "_pathToMyApp=%%~$PATH:g"
rem ↑↑ NO leading backslash
rem next line calls `myapp.exe` using its fully qualified name
"%_pathToMyApp%"
Un ejemplo real: (tenga en cuenta que un porcentaje único suscribe %g
su uso desde el símbolo del sistema en una cmd
ventana abierta). Mi PATH
variable se lee …;C:\Utils\;…
sin más referencias a C:\Utils
la carpeta (directorio base), myapp.exe
es una aplicación sencilla que muestra todos los parámetros suministrados:
d:\bat> myapp.exe
'myapp.exe' is not recognized as an internal or external command,
operable program or batch file.
d:\bat> bin\myapp.exe
The system cannot find the path specified.
d:\bat> set _
Environment variable _ not defined
d:\bat> for %g in ("bin\myapp.exe") do @set "_pathToMyApp=%~$PATH:g"
d:\bat> set _
_pathToMyApp=C:\Utils\bin\myapp.exe
d:\bat> "%_pathToMyApp%" display all parameters
param 0 = C:\Utils\bin\myapp.exe
param 1 = display
param 2 = all
param 3 = parameters
d:\bat>
Respuesta2
En Windows puedes configurar tus propias variables de entorno y luego usarlas. Entonces podrías ir a:
- Panel de control
- Sistema
- Configuración avanzada del sistema
- Lengüeta avanzada
- Variables de entorno
Luego simplemente haga clic en "nuevo" y agregue su variable. Luego puede usar esa variable en los comandos. Así que puedes establecer tu ruta y usarla como quieras con cualquier nombre que le des.
Ejemplo:
Entonces, en su caso, podría configurar la siguiente variable: appNameBinPath = "C:\bar". Luego podría usarla en el siguiente ejemplo:
C:\foo>%appNameBinPath%\bin\myapp.exe
Alternativamente, si desea establecer una variable permanente mediante script y/o línea de comando, puede ver este artículo:https://stackoverflow.com/questions/5898131/set-a-persistent-environment-variable-from-cmd-exe