percorso relativo nello script BAT


130

Ecco la mia cartella del programma sul mio drive USB:

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

Vorrei usare run.batper iniziare Iris.exe

Non posso usare questo: F:/Program/bin/Iris.execome un collegamento, perché a volte non si collega come unità F:( ad esempio E: o G:)

Cosa devo scrivere nel file bat per funzionare indipendentemente dalla lettera dell'unità?

Ho provato questo nel file BAT:

"\bin\Iris.exe"

Ma non funziona

Risposte:


275

Usa questo nel tuo file batch:

%~dp0\bin\Iris.exe

%~dp0 si risolve nel percorso completo della cartella in cui risiede lo script batch.


7
In realtà questo si risolve in qualcosa del genere C:\myDir\\bin\Iris.exe(notare la doppia barra rovesciata). Funziona ancora, ma lasciando da parte la barra rovesciata prima che bin sembra essere "più pulito"? -> %~dp0bin\Iris.exe.
Mozzbozz,

8
@mozzbozz Se puoi garantire che %~dp0avrà sempre una barra rovesciata finale entrambe le istruzioni funzioneranno. Altrimenti quella con la barra rovesciata aggiuntiva è la variante più sicura.
Ansgar Wiechers,

4
Ok, questo è un punto. L'ho testato solo su due diversi computer Windows 7, potrebbe essere diverso altrove (XP, Vista o Windwos 8 -> Non lo so ma: la logica di Microsoft e non sono riuscito a trovare alcun documento a riguardo;)). Tuttavia, ho scoperto che dovevo mettere tra virgolette ( "%~dp0\bin\Iris.exe") poiché il percorso conteneva uno spazio bianco :) Solo per essere davvero sicuro che funziona su ogni computer.
Mozzbozz,

1
puoi assicurarti che ci sia una barra rovesciata con SET "scriptdir=%~dp0"e nella riga successiva IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\". Ho visto incidenti in cui una doppia barra rovesciata nel mezzo del percorso interrompe il software.
LogicDaemon

40

È possibile ottenere tutte le proprietà del file richieste utilizzando il codice seguente:

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

Ho scoperto che %CD%fornisce il percorso da cui è stato chiamato lo script e non il percorso dello script, tuttavia, %~dp0fornirà il percorso dello script stesso.


14

Dovresti essere in grado di utilizzare la directory corrente

"% Cd%" \ bin \ Iris.exe


1
Questo non riesce quando la directory corrente non lo è Program, ciò accade quando si fa doppio clic su run.batda Explorer. %CD%è la directory corrente %~dp0è la directory del file batch stesso
jeb,

5

o bin\Iris.exe (nessuna barra iniziale - perché ciò significa iniziare dalla radice)
o \Program\bin\Iris.exe(percorso completo)


1
bin \ Iris.exe non funziona :( Non mi piace usare root, perché un giorno forse sposterò questa directory in un'altra posizione. E se chiedessi al SO l'attuale percorso assoluto? e userò che per avviare exe nel cestino?
user2083037

Supponevo che l'unità corrente sarebbe l'unità della chiavetta USB, e la cartella corrente sarebbe \Program- non è vero? Puoi dimostrarlo con un semplice cdcomando nella riga prima di provare a eseguire il file .exe
AjV Jsy

Usare semplicemente un percorso relativo non funzionerà necessariamente. Il percorso sarà relativo alla directory di lavoro corrente, che potrebbe essere diversa dalla directory padre di run.bat.
Ansgar Wiechers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.