Ottieni directory contenente lo script batch attualmente eseguito


30

Uso %0nel file batch per ottenere la directory contenente il file batch ma il risultato è: -

c:\folder1\folder2\batch.bat

Voglio solo directory, senza nome di file batch, in questo modo: -

c:\folder1\folder2\

Come posso farlo? Forse dovrei filtrare il percorso. Se sì, come posso farlo?


Quando si utilizza% 0 in un file batch come parte di una riga comandi, è necessario utilizzare% 0 \ .. \ RestOfStuff. Il doppio punto lo riporta indietro al nome del file.
John Gardeniers,

La directory contenente lo script attualmente eseguito non è necessariamente la stessa della directory di lavoro corrente (CD)! Ho modificato la domanda di conseguenza - ora evita il termine di "directory corrente".
Chiccodoro,

Risposte:


52
%~p0

Restituirà solo il percorso.

%~dp0

Restituirà l'unità + percorso.

Ulteriori informazioni sull'argomento sono disponibili sul sito di Microsoft .

Le informazioni su questa sintassi possono anche essere trovate nella guida per il comando for eseguendosi for /?su un sistema operativo Windows.


2
Come altra fonte di riferimento, lo stesso elenco di sostituzioni variabili viene mostrato anche quando si digitafor /?
Kevin

% ~ dp0 fornisce la directory del file batch in esecuzione. Se il file batch si trova in una directory diversa, si ottiene quell'altra directory. % CD% ti dà sempre la directory corrente.
Mihai Danila,

@MihaiDanila, no, non è quello che ha chiesto OP.
Bart De Vos,

In realtà sono arrivato a questa domanda durante la ricerca di un modo per ottenere la directory corrente . Questo è stato il primo successo su Google. Il titolo ovviamente dice la directory corrente , anche se hai ragione sul contenuto. Abbiamo entrambi ragione, ma penso che stia disteso e ho più ragione su ciò che la domanda in realtà trasmette, nonostante ciò che è stato inteso da essa. È per questo che ho alzato la risposta di Lain ... Il titolo della domanda dovrebbe essere rinominato per essere in sincronia con la domanda stessa.
Mihai Danila,

1
Probabilmente il titolo dell'articolo nel collegamento avrebbe potuto essere fornito, poiché il collegamento non è più valido .....
Rupsingh Mathwale

16

La directory corrente è contenuta in% CD%


4
% CD% ritrova il percorso dal quale esegui il batch e non dove esiste il file batch
Mohammad AL-Rawabdeh

4
@Mohammad: in effetti, è la directory corrente . L'altra è la directory in cui si trova il file batch. Quei due non sono gli stessi e la tua domanda ti chiede esplicitamente questo. Quindi, per favore, modificalo se non è quello che vuoi dire.
Joey,

% CD% restituisce il percorso corrente del file batch ma non riesce quando eseguiamo il file batch come amministratore. Quando eseguiamo il file batch come amministratore, restituisce il percorso di System32. Quindi l'opzione migliore è usare% ~ dp0 per il percorso completo

% ~ dp0 fornisce la directory del file batch in esecuzione. Se il file batch si trova in una directory diversa, si ottiene quell'altra directory. % CD% ti dà sempre la directory corrente.
Mihai Danila,

Per il riferimento del lettore - la domanda originariamente stava usando il termine "directory corrente" mentre intendeva la directory contenente lo script - questo è stato risolto.
Chiccodoro,

4

Alcune espressioni che influenzano il nome file:

~f0fornirà il nome file completo.
~dpnx0darà lo stesso di ~f0, ma questo ti mostra che puoi scomporlo in parti: d = unità p = percorso n = nome x = estensione


0

usa il comando chdir

Opzione 1:

chdir 

Opzione 2:

echo %CD%

Lo stesso qui: questa non era l'intenzione del PO - la domanda ora è più chiara.
Chiccodoro,
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.