Récupère le répertoire contenant le script de commandes en cours d'exécution

30

J'utilise %0dans un fichier batch pour obtenir le répertoire contenant le fichier batch mais le résultat est: -

c:\folder1\folder2\batch.bat

Je veux juste un répertoire, sans nom de fichier batch, comme ceci: -

c:\folder1\folder2\

Comment puis-je le faire? Je devrais peut-être filtrer le chemin. Si oui, comment faire?

Mohammad AL-Rawabdeh
la source
Lorsque vous utilisez% 0 dans un fichier de commandes dans le cadre d'une ligne de commande, vous devez utiliser% 0 \ .. \ RestOfStuff. Le double point le ramène au-delà du nom de fichier.
John Gardeniers
Le répertoire contenant le script actuellement exécuté n'est pas nécessairement le même que le répertoire de travail actuel (CD)! J'ai édité la question en conséquence - cela évite maintenant le terme de "répertoire courant".
chiccodoro

Réponses:

52
%~p0

Renvoie le chemin uniquement.

%~dp0

Renvoie le lecteur + chemin.

Plus d'informations sur le sujet peuvent être trouvées sur le site de Microsoft .

Des informations sur cette syntaxe peuvent également être trouvées dans l'aide de la commande for en s'exécutant for /?sur un système d'exploitation Windows.

Bart De Vos
la source
2
Comme autre source de référence, la même liste de substitutions de variables s'affiche également lorsque vous tapezfor /?
Kevin
% ~ dp0 donne le répertoire du fichier batch en cours d'exécution. Si le fichier de commandes se trouve dans un répertoire différent, vous obtenez cet autre répertoire. % CD% vous donne toujours le répertoire courant.
Mihai Danila
@MihaiDanila, non, ce n'est pas ce que OP a demandé.
Bart De Vos
En fait, je suis arrivé à cette question en cherchant un moyen d'obtenir le répertoire actuel . Ce fut le premier succès sur Google. Le titre indique évidemment le répertoire actuel , bien que vous ayez raison sur le contenu. Nous avons tous les deux raison, mais je pense que laïc et moi avons plus raison sur le contenu de la question, malgré ce que cela voulait dire. C'est pourquoi j'ai augmenté la réponse de Lain ... Le titre de la question devrait être renommé pour être en phase avec la question elle-même.
Mihai Danila
1
Le titre de l'article dans le lien aurait probablement pu être fourni, car le lien n'est plus valide .....
Rupsingh Mathwale
16

Le répertoire actuel est conservé dans% CD%

user9517 prend en charge GoFundMonica
la source
4
% CD% reture le chemin à partir duquel vous exécutez le lot, pas là où le fichier de commandes existe
Mohammad AL-Rawabdeh
4
@Mohammad: En effet, c'est le répertoire courant . L'autre est le répertoire où se trouve le fichier de commandes. Ces deux ne sont pas les mêmes et votre question demande explicitement celle-ci. Veuillez donc le modifier si ce n'est pas ce que vous voulez dire.
Joey
% CD% renvoie le chemin actuel du fichier de commandes mais échoue lorsque nous exécutons le fichier de commandes en tant qu'administrateur. Lorsque nous exécutons un fichier de commandes en tant qu'administrateur, il renvoie le chemin d'accès de System32. Donc, la meilleure option est d'utiliser% ~ dp0 pour le chemin complet
% ~ dp0 donne le répertoire du fichier batch en cours d'exécution. Si le fichier de commandes se trouve dans un répertoire différent, vous obtenez cet autre répertoire. % CD% vous donne toujours le répertoire courant.
Mihai Danila
Pour la référence du lecteur - la question utilisait à l'origine le terme "répertoire courant" tout en signifiant le répertoire contenant le script - cela est maintenant corrigé.
chiccodoro
4

Quelques expressions qui affectent le nom de fichier:

~f0donnera le nom de fichier complet.
~dpnx0donnera le même que ~f0, mais cela vous montre que vous pouvez le décomposer en plusieurs parties: d = lecteur p = chemin n = nom x = extension

Mechaflash
la source
0

utiliser la commande chdir

Option 1:

chdir 

Option 2:

echo %CD%
sensoft
la source
Idem ici: ce n'était pas l'intention du PO - la question est maintenant plus claire.
chiccodoro