[Résolu] - Batch - Une variable pour le répertoire parent

La section des versions NT, 2000, et XP de windows : informations, problèmes, questions, avis ou dépannages y trouveront leur place.

Modérateur: Modérateurs

[Résolu] - Batch - Une variable pour le répertoire parent

Messagepar Sanitrik » 27 Juil 2006 15:35

Bonjour, je recherche une variable pour revenir un répertoire en arrière, c'est-à-dire, vous connaissez la variable %~dp0, celle-ci prend le répertoire d'emplacement où se trouve le fichier script batch, il m'arrive de l'utiliser pour créer un fichier log dans le même répertoire que le fichier script batch qui créait ce fichier log, voilà ce que je fais:
Code: Tout sélectionner
echo >> "%~dp0fichierLOG.txt"

Maintenant je voudrais créer un fichier un répertoire au-dessus du répertoire ou se trouve le fichier script batch, quelqu'un saurait-il me renseigner ?
Dernière édition par Sanitrik le 29 Juil 2006 13:34, édité 1 fois.
Avatar de l’utilisateur
Sanitrik
Libellulien Junior
Libellulien Junior
 
Messages: 369
Inscription: 02 Aoû 2005 17:56
Localisation: Perdu dans la matris d'un PC qui n'existe plus

Messagepar Jason » 27 Juil 2006 17:32

salut !

les 4 commandes suivantes (très voisines) créent un fichier dans le répertoire supérieur :
1 - echo "Methode 1" >> "%~dp0\..\fichierLOG_1.txt"
2 - set c="%~dp0\..\"
echo "Methode 3" >> "%c%\fichierLOG_3.txt"
3 - set b=%CD%
echo "Methode 2" >> "%b%\..\fichierLOG_2.txt"
4 - set d=%CD%\..
echo "Methode 4" >> "%d%\fichierLOG_4.txt"

@+
pour trouver sans chercher,il faut avoir longtemps cherché sans trouver
Avatar de l’utilisateur
Jason
Libellulien Junior
Libellulien Junior
 
Messages: 327
Inscription: 01 Sep 2004 22:38
Localisation: Toulouse

Messagepar Sanitrik » 27 Juil 2006 17:46

Jason a écrit:salut !

les 4 commandes suivantes (très voisines) créent un fichier dans le répertoire supérieur :
1 - echo "Methode 1" >> "%~dp0\..\fichierLOG_1.txt"
2 - set c="%~dp0\.."
echo "Methode 3" >> "%c%\fichierLOG_3.txt"
3 - set b=%CD%
echo "Methode 2" >> "%b%\..\fichierLOG_2.txt"
4 - set d=%CD%\..
echo "Methode 4" >> "%d%\fichierLOG_4.txt"

@+


Salut et merci beaucoup :wink:

C'est parfait :)

Maintenant je voudrais faire pareille mais dans une variable comme ceci:
Code: Tout sélectionner
Set VarArrier="%~dp0\.."
 echo  %VarArrier%
Mais cela ne fonctionne pas.
Saurais tu aranger ça ?



--- Edite - 1

Et comme ça, sa marche pas non plu:
Code: Tout sélectionner
echo  "%~dp0.." > t.txt



--- Edite - 1

Pour la variabe j'ai essayer avec une boucle for sans suxcé:

Code: Tout sélectionner
For /f %%i In ("%~dp0..") Do Set VarTestArr=%%i
 echo %VarTestArr%
Avatar de l’utilisateur
Sanitrik
Libellulien Junior
Libellulien Junior
 
Messages: 369
Inscription: 02 Aoû 2005 17:56
Localisation: Perdu dans la matris d'un PC qui n'existe plus

Messagepar Jason » 27 Juil 2006 22:58

salut !

c'est avec plaisir, le forum est là pour s'entraider 8)

Pour ta 2ème question, j'ai du mal à voir ce que tu veux faire :
si j'ai une arborescence c:\temp1\temp2\temp3 avec mon fichier batch dans temp2,
Code: Tout sélectionner
Set VarArrier="%~dp0.."
echo  %VarArrier%

affiche "C:\temp1\temp2\.." (avec les guillemets et un espace devant "C: )

Code: Tout sélectionner
echo  "%~dp0..\" > t.txt

écrit "C:\temp1\temp2\..\" dans un fichier t.txt de temp2 (avec les guillemets et un espace devant "C: )

Code: Tout sélectionner
For /f %%i In ("%~dp0..\") Do Set VarTestArr=%%i
echo %VarTestArr%

affiche C:\temp1\temp2\..\

Cherches-tu à récupérer, dans une variable ou un fichier, toute l'arborscence depuis le répertoire supérieur à celui contenant ton fichier batch ?

@+
pour trouver sans chercher,il faut avoir longtemps cherché sans trouver
Avatar de l’utilisateur
Jason
Libellulien Junior
Libellulien Junior
 
Messages: 327
Inscription: 01 Sep 2004 22:38
Localisation: Toulouse

Messagepar Sanitrik » 27 Juil 2006 23:17

Merci encore :wink:

Ce que je cherche c'est obtenir le répertoire courant.
Avatar de l’utilisateur
Sanitrik
Libellulien Junior
Libellulien Junior
 
Messages: 369
Inscription: 02 Aoû 2005 17:56
Localisation: Perdu dans la matris d'un PC qui n'existe plus

Messagepar Jason » 28 Juil 2006 06:06

salut !

la variable %CD% contient le nom du répertoire dans lequel tu es
Code: Tout sélectionner
echo je suis dans %CD%
cd c:\temp
echo 1 - je suis dans %CD%
cd c:\temp1\temp_2B
echo 2 - je suis dans %CD%
cd %~dp0
echo 3 - je suis revenu dans %CD%
donne
Code: Tout sélectionner
je suis dans C:\temp1\temp2
1 - je suis dans C:\TEMP
2 - je suis dans C:\temp1\temp_2b
3 - je suis revenu dans C:\temp1\temp2
c'est ce que tu cherchais ?

@+
pour trouver sans chercher,il faut avoir longtemps cherché sans trouver
Avatar de l’utilisateur
Jason
Libellulien Junior
Libellulien Junior
 
Messages: 327
Inscription: 01 Sep 2004 22:38
Localisation: Toulouse

Messagepar Sanitrik » 28 Juil 2006 13:05

Ce que je veut c'est une variable pour remonter au répertoire parent.
Avatar de l’utilisateur
Sanitrik
Libellulien Junior
Libellulien Junior
 
Messages: 369
Inscription: 02 Aoû 2005 17:56
Localisation: Perdu dans la matris d'un PC qui n'existe plus

Messagepar jean@adimp.ch » 28 Juil 2006 13:48

Salut,
Dans la console, tape :
Code: Tout sélectionner
help

et essaye
Code: Tout sélectionner
pushd /?

couplé avec
Code: Tout sélectionner
popd /?

et surtout, avec les extensions, le
Code: Tout sélectionner
for/?


A+ et bien du plaisir, batman.
Meilleures salutations.

Jean Tinguely Awais.
un mélange entre un schtroumpf et droopy http://www.schtroopy.com
Mon firewall windows préféré : http://www.t-servi.com/ftp/spf.exe
Avatar de l’utilisateur
jean@adimp.ch
Libellulien Junior
Libellulien Junior
 
Messages: 389
Inscription: 07 Oct 2005 08:45

Messagepar Sanitrik » 28 Juil 2006 16:51

J'ai régader l'aide en ligne de comande mais je ne vois pas comment faire ce que je veux avec ses commandes.
Avatar de l’utilisateur
Sanitrik
Libellulien Junior
Libellulien Junior
 
Messages: 369
Inscription: 02 Aoû 2005 17:56
Localisation: Perdu dans la matris d'un PC qui n'existe plus

Messagepar Jason » 28 Juil 2006 19:45

salut !

je vois bien une méthode :
Code: Tout sélectionner
:: on met le répertoire courant dans une variable
set origine=%CD%
echo je suis dans %origine%
:: un p'tit tour au-dessus et on mémorise le répertoire
cd ..
set pere=%CD%
echo je suis chez mon pere %pere%
:: retour au départ
cd %origine%
echo je suis revenu a l'origine [ %CD% ] mon pere est %pere%

ce qui donne
Code: Tout sélectionner
je suis dans C:\temp1\temp2
je suis chez mon pere C:\temp1
je suis revenu a l'origine [ C:\temp1\temp2 ] mon pere est C:\temp1

j'avoue que c'est un peu bestial :oops:

il y a sans doute une méthode plus élégante (boucle for et utilisation des paramètres token et delims) en comptant le nombre n d'éléments séparés par le caractère '\', puis en ne prenant en compte que les n-1 premiers.
J'ai trouvé un site qui semble bien documenté sur ce sujet.

si tu trouves une solution, j'avoue être intéressé
@+
pour trouver sans chercher,il faut avoir longtemps cherché sans trouver
Avatar de l’utilisateur
Jason
Libellulien Junior
Libellulien Junior
 
Messages: 327
Inscription: 01 Sep 2004 22:38
Localisation: Toulouse

Messagepar Sanitrik » 28 Juil 2006 20:53

Merci encore :wink:

Mais il faut absolument que je puisse renseigner directement une variable.
Avatar de l’utilisateur
Sanitrik
Libellulien Junior
Libellulien Junior
 
Messages: 369
Inscription: 02 Aoû 2005 17:56
Localisation: Perdu dans la matris d'un PC qui n'existe plus

Messagepar jean@adimp.ch » 28 Juil 2006 22:16

Salut,
Exemple avec pushd et popd :
Code: Tout sélectionner
C:\WINDOWS\system32\drivers\etc>pushd c:\
C:\>echo "je suis dans un autre repertoire!"
"je suis dans un autre repertoire!"
C:\>popd
C:\WINDOWS\system32\drivers\etc>echo "je suis revenu dans mon repertoire de base!"
"je suis revenu dans mon repertoire de base!"
C:\WINDOWS\system32\drivers\etc>


A+.
Meilleures salutations.

Jean Tinguely Awais.
un mélange entre un schtroumpf et droopy http://www.schtroopy.com
Mon firewall windows préféré : http://www.t-servi.com/ftp/spf.exe
Avatar de l’utilisateur
jean@adimp.ch
Libellulien Junior
Libellulien Junior
 
Messages: 389
Inscription: 07 Oct 2005 08:45

Messagepar Sanitrik » 28 Juil 2006 22:25

Merci beaucoup :wink:

Mais je ne comprend pas ce script.
Avatar de l’utilisateur
Sanitrik
Libellulien Junior
Libellulien Junior
 
Messages: 369
Inscription: 02 Aoû 2005 17:56
Localisation: Perdu dans la matris d'un PC qui n'existe plus

Messagepar jean@adimp.ch » 28 Juil 2006 23:17

Salut,
L'instruction pushd permet de changer de répertoire tout en mettant en mémoire tampon le répertoire parent. L'instruction popd permet de récupérer la valeur dans le tampon et de se positionner dans le répertoire.
A+.
Meilleures salutations.

Jean Tinguely Awais.
un mélange entre un schtroumpf et droopy http://www.schtroopy.com
Mon firewall windows préféré : http://www.t-servi.com/ftp/spf.exe
Avatar de l’utilisateur
jean@adimp.ch
Libellulien Junior
Libellulien Junior
 
Messages: 389
Inscription: 07 Oct 2005 08:45

Messagepar Sanitrik » 28 Juil 2006 23:36

OK, merci pour ses renseignements :wink:

Mais je ne veux pas me positioner dans le répertoire parent, mais juste créer une variable du répertoire parent.
Avatar de l’utilisateur
Sanitrik
Libellulien Junior
Libellulien Junior
 
Messages: 369
Inscription: 02 Aoû 2005 17:56
Localisation: Perdu dans la matris d'un PC qui n'existe plus

Messagepar jean@adimp.ch » 29 Juil 2006 06:56

Salut,
Essaye de rentrer en ligne de commande :
Code: Tout sélectionner
C:\WINDOWS\system32\drivers\etc>set parent=%CD%

C:\WINDOWS\system32\drivers\etc>pushd c:\windows

C:\WINDOWS>echo %parent%
C:\WINDOWS\system32\drivers\etc


A+
Meilleures salutations.

Jean Tinguely Awais.
un mélange entre un schtroumpf et droopy http://www.schtroopy.com
Mon firewall windows préféré : http://www.t-servi.com/ftp/spf.exe
Avatar de l’utilisateur
jean@adimp.ch
Libellulien Junior
Libellulien Junior
 
Messages: 389
Inscription: 07 Oct 2005 08:45

Messagepar jean@adimp.ch » 29 Juil 2006 07:04

Salut,
Un autre exemple :
Code: Tout sélectionner
C:\WINDOWS>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Te
hnologies\ATI Control Panel;C:\Program Files\Fichiers communs\GTK\2.0\bin

C:\WINDOWS>copy con test_path.bat
set parent=%CD%
echo %parent%
^Z
        1 fichier(s) copié(s).

C:\WINDOWS>cd system32\drivers\etc

C:\WINDOWS\system32\drivers\etc>test_path.bat

C:\WINDOWS\system32\drivers\etc>set parent=C:\WINDOWS\system32\drivers\etc

C:\WINDOWS\system32\drivers\etc>echo C:\WINDOWS\system32\drivers\etc
C:\WINDOWS\system32\drivers\etc

C:\WINDOWS\system32\drivers\etc>


A+
Meilleures salutations.

Jean Tinguely Awais.
un mélange entre un schtroumpf et droopy http://www.schtroopy.com
Mon firewall windows préféré : http://www.t-servi.com/ftp/spf.exe
Avatar de l’utilisateur
jean@adimp.ch
Libellulien Junior
Libellulien Junior
 
Messages: 389
Inscription: 07 Oct 2005 08:45

Messagepar Sanitrik » 29 Juil 2006 10:32

Merci encore pour ces exemples :wink:

Mais il faut absolument que je puisse directement renseigner une variable.
Avatar de l’utilisateur
Sanitrik
Libellulien Junior
Libellulien Junior
 
Messages: 369
Inscription: 02 Aoû 2005 17:56
Localisation: Perdu dans la matris d'un PC qui n'existe plus

Messagepar Jason » 29 Juil 2006 13:21

salut !

Code: Tout sélectionner
echo Je suis dans %CD%
FOR /F %%a IN ("%CD%\..") DO set pere=%%~fa
echo Mon pere est %pere%

c'est ça que tu voulais ?
@+
pour trouver sans chercher,il faut avoir longtemps cherché sans trouver
Avatar de l’utilisateur
Jason
Libellulien Junior
Libellulien Junior
 
Messages: 327
Inscription: 01 Sep 2004 22:38
Localisation: Toulouse

Messagepar Sanitrik » 29 Juil 2006 13:29

Jason a écrit:salut !

Code: Tout sélectionner
echo Je suis dans %CD%
FOR /F %%a IN ("%CD%\..") DO set pere=%%~fa
echo Mon pere est %pere%

c'est ça que tu voulais ?
@+


Exatement, merci beaucoup :wink:

Pourait- tu me dire ce que signifi le f dans %%~fa ?
Avatar de l’utilisateur
Sanitrik
Libellulien Junior
Libellulien Junior
 
Messages: 369
Inscription: 02 Aoû 2005 17:56
Localisation: Perdu dans la matris d'un PC qui n'existe plus

Suivante

Retourner vers Windows NT, 2000, XP

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
cron