Un batch capable de retrouver son propre chemin...

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
Bigfish
Batcheur débutant
Messages : 26
Enregistré le : 08 août 2008 18:46

Un batch capable de retrouver son propre chemin...

Message par Bigfish »

Bonjour,

le code ci-dessous permet au batch de retrouver son propre chemin.
Il fonctionne tres bien mais je ne suis pas tres satisfait de la methode. Mais peut etre qu'il n'y en a pas d'autre ?

Je voudrais votre avis sur la methode notamment concernant la boucle qui extrait le chemin. Une fois que la
methode sera validée je poserais ce bout de code dans la vitrine batch.

Avant de donner votre avis n'oubliez pas que ce code doit retrouver un chemin qui peut avoir un nombre de repertoir
variable et que l'on ne connait pas le nom du batch !

Code : Tout sélectionner

@ echo Off

rem on recupere la ligne de commande originale passée à CMD.EXE en ne gardant que le chemin et le nom du batch lui meme
for /f "tokens=3* delims= " %%i in ("%CMDCMDLINE%") do set currentdir=%%~i
rem on vire la double quote residuelle
set currentdir=%currentdir:~1%

rem cette boucle supprime un caractere a droite a chaque passage pour supprimer le nom du batch et ne garder que le chemin
:boucle
Rem supprime un caractere a droite
set currentdir=%currentdir:~0,-1%
rem on test le chemin. Si le chemin n'est pas bon la commande suivante ne fonctionnera pas
cd %currentdir%
rem si la commande precedente a fonctionnée alors la lcommande suivante devrait renvoyer le meme chemin
set testcurrentdir=%CD%\
rem on verifi que les chemins sont identiques
if %currentdir%==%testcurrentdir% goto suite
rem si ce n'est pas le cas on boucle
goto boucle

:suite
echo %currentdir%
pause
 
quelques explications:

echo %CMDCMDLINE% renvoi :
cmd /c ""C:\Monchemin\MonBatch.bat" "

la ligne :
for /f "tokens=3* delims= " %%i in ("%CMDCMDLINE%") do set currentdir=%%~i
renvoi :
"C:\Monchemin\MonBatch.bat

donc finalement avec la premiere partie du code on obtient le chemin + le nom du batch:
C:\Monchemin\MonBatch.bat

J'ai eu besoin de ce code car le batch ce trouve dans un repertoire qui peut etre deplacé.
Ce repertoire contient 2 autres fichiers qui seront appelés par ce batch. Je donne aussi a
l'utilisateur la possiblité de renomer ce batch. L'avantage est qu'il n'y a pas de chemin ecrit en dur
dans le code et donc qu'il n'y a pas besoin de le modifier si sont repertoire a ete deplacé

A+ :)
Bigfish
Batcheur débutant
Messages : 26
Enregistré le : 08 août 2008 18:46

Re: Un batch capable de retrouver son propre chemin...

Message par Bigfish »

Re,

bon ben en faite il y avait plus simple... je ne devais pas etre reveille ce matin !!

Code : Tout sélectionner

@echo Off

set currentdir=%~dp0

echo %currentdir%
pause
Desole pour le derangement :oops:

A+
sam06
Batcheur débutant
Messages : 12
Enregistré le : 20 nov. 2008 18:17

Re: Un batch capable de retrouver son propre chemin...

Message par sam06 »

Merci pour cette astuce, ça faisait un moment aussi que je cherchais le moyen de ne pas déclarer en dur le repertoire courant du batch. Petit complément, comme souvent sous Windows les repértoires ont des noms longs et avec des espaces, j 'ai modifié comme suit, en entourant avec des guillemets :

@echo off
set currentdir=%~dp0
copy "c:\test.txt" "%currentdir%"
pause
Répondre