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.