Changer le répertoire actuel en répertoire de fichiers batch

18

J'ai un batfichier sur Windows qui exécute une opération procdump . Le problème avec le fichier de commandes est que je dois d'abord accéder au répertoire des fichiers de commandes avant d'exécuter le travail, sinon le script ne fonctionnera pas.

Comment passer au répertoire de fichiers batch actuel?

J'ai essayé le code suivant dans mon procdump.bat:

cd "%~dp"
procdump -h devenv.exe mydump.txt

Mais il a échoué, le message d'erreur est:

L'utilisation suivante de l'opérateur de chemin dans la substitution de paramètres par lots n'est pas valide:% ~ dp "

Pour les formats valides, tapez CALL /? ou pour /?

Edit: La réponse fournie fonctionne, mais il n'y a qu'un seul hic: si mon répertoire actuel est différent du répertoire du fichier batch, alors j'obtiendrais "Le système ne peut pas trouver le chemin spécifié". Quelqu'un a des idées?

Graviton
la source
D'où obtenez-vous ce "% ~ dp"?
fretje

Réponses:

24

Ok, je pense avoir trouvé ici ce que tu veux dire %~dp.

Je pense que ce que vous voulez vraiment faire est le suivant:

cd /D "%~dp0"

(!) Mais notez que cela ne vous donnera toujours pas le bon comportement lorsque vous essayez d'exécuter votre lot alors que le répertoire actuel se trouve sur un autre lecteur car cdcela ne change pas le lecteur actif.

Edit : Apparemment (merci @Yoopergeek ), vous pouvez ajouter le /Dparamètre à la cdcommande pour lui permettre également de changer le lecteur actif.

fretje
la source
Pour plus d'informations sur ces paramètres de lot, consultez help callà l' cmdinvite.
pause jusqu'à nouvel ordre.
À propos, vous pouvez combiner ces paramètres comme ceci:%~dp0
pause jusqu'à nouvel ordre.
Votre réponse est utile; mais si mon répertoire actuel se trouve dans un répertoire différent de celui du fichier de commandes, la commande ci-dessus échouera; même cd /Dou cd "%~dp0" /Dne peut pas aider.
Graviton
@ Ngu Soon Hui: Que votre répertoire actuel soit dans un répertoire différent de celui du fichier batch était évident. Mais pourquoi cette commande échouerait-elle? Je l'ai testé ici et cela fonctionne.
fretje
1
J'ai trouvé la solution en utilisant cd /D "%~dp0". Merci.
Graviton
4

Je laisserais un commentaire à la réponse de fretje, mais évidemment je ne peux pas ???


Quoi qu'il en soit, concernant la note:
Mais notez que cela ne vous donnera toujours pas le bon comportement lorsque vous essayez d'exécuter votre lot alors que le répertoire actuel se trouve sur un autre lecteur car cd ne change pas le lecteur actif.


Utilisez le /Dcommutateur dans votre commande de CD et le CD changera le lecteur actif.

Yoopergeek
la source
... mais je peux commenter ma propre réponse. Mec, ça craint de ne pas avoir de représentant sur ServerFault ... souhaite qu'un représentant SO "saigne" ici.
Yoopergeek
1
@Yoopergeek: vous pouvez associer vos comptes. Cela vous donnera 100 représentants ici si votre représentant SO est supérieur à 200.
fretje