Qual è la directory corrente in un file batch?


510

Voglio creare alcuni file batch per automatizzare un programma.

La mia domanda è quando creo il file batch, qual è la directory corrente? È la directory in cui si trova il file o è la stessa directory che appare nel prompt dei comandi o qualcos'altro?

Risposte:


1026

Dall'interno del file batch:

  • %cd%si riferisce alla directory di lavoro corrente (variabile)
  • %~dp0 si riferisce al percorso completo della directory del file batch (statico)
  • %~dpnx0ed %~f0entrambi si riferiscono al percorso completo della directory batch e al nome del file (statico).

Vedi anche: Cosa significa% ~ dp0 e come funziona?


5
@Souely - %0potrebbe fornire il nome della subroutine corrente, ma %~dp0fornirà sempre il percorso completo del file batch in esecuzione.
dbenham,

77
In realtà, sembra che% ~ dp0 fornisca il percorso completo della directory in cui si trova il file batch in esecuzione.% ~ Dpnx0 (che equivale a% ~ f0) fornisce il percorso completo del file batch. Vedi robvanderwoude.com/parameters.php per maggiori dettagli.
Deadlydog,

6
Vedi anche buone risposte dettagliate di una domanda simile: Ottieni l'elenco degli argomenti passati nello script batch di Windows (.bat)
olibre

1
Sfortunatamente quando eseguito come processo da .net% ~ dp0 è la directory di lavoro non la directory dei file batch, lo abbiamo scoperto nel modo più difficile.
trampster

3
Come esempio più esplicito, quando si fa clic con il pulsante destro del mouse su un .cmdfile ed è in esecuzione come amministratore, %cd%fornisce C:\WINDOWS\system32e %~dp0fornisce alla directory del file batch una barra finale.
icc97,

25

Di solito è la directory da cui viene avviato il file batch, ma se si avvia il file batch da un collegamento, potrebbe essere fornita una directory di avvio diversa. Inoltre, quando si è in cmd e la directory corrente è c:\dir3, è comunque possibile avviare il file batch utilizzando c:\dir1\dir2\batch.batin tal caso, la directory corrente sarà c:\dir3.


11

In un file batch,% cd% è il comando più comunemente usato per la directory corrente, sebbene sia possibile impostare la propria variabile:

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

Quindi supponiamo che tu voglia aprire Myprog.exe. Se fosse nella stessa cartella, useresti il ​​comando:

start %mypath%\Myprog.exe

Ciò aprirebbe Myprog dalla cartella corrente.

L'altra opzione è quella di creare una directory in C: chiamata AutomatePrograms. Quindi, trasferisci i tuoi file in quella cartella, quindi puoi aprirli usando il seguente comando:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"

1
Come notato nella risposta in alto qui, %cd%è variabile, quindi eseguire il file batch da Windows Explorer come amministratore darà C:\WINDOWS\system32che quasi sicuramente non è quello che vuoi. %~dp0è più coerente.
icc97,

6

Supponi che stavi aprendo un file nella directory corrente. Il comando sarebbe:

 start %cd%\filename.filetype

Spero di aver risposto alla tua domanda.


5

È la directory da cui si esegue il comando per eseguire il file batch.

Come menzionato nelle risposte precedenti, puoi aggiungere il seguente comando allo script per verificare:

> set current_dir=%cd%
> echo %current_dir%  

4

È la directory da cui si avvia il file batch. Ad esempio, se il batch è attivo c:\dir1\dir2e lo fai cd c:\dir3, quindi esegui il batch, sarà la directory corrente c:\dir3.


0

Solo i miei 2 centesimi. Il comando seguente non riesce se chiamato dal file batch (Windows 7) posizionato su pendrive:

xcopy /s /e /i %cd%Ala C:\KS\Ala

Ma questo fa il lavoro:

xcopy /s /e /i %~dp0Ala C:\KS\Ala

Questo è l'interruttore che stavo cercando per determinare il percorso della directory principale del mio file bat senza quel nome di file batch:%~dp0
Ammar Mohammad
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.