Comando de Windows con carpeta relativa a PATH

Comando de Windows con carpeta relativa a PATH

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 FORcomando 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 %%gpor usar en un script .bato .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 %gsu uso desde el símbolo del sistema en una cmdventana abierta). Mi PATHvariable se lee …;C:\Utils\;…sin más referencias a C:\Utilsla carpeta (directorio base), myapp.exees 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

información relacionada