Chercher deux fichiers dans répertoires différents et variabiliser la résultat [Résolu]

Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
- - Dernière réponse : barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
- 2 août 2019 à 15:15
Bonjour,
Me voici de nouveau avec mes problématiques de batch...
J'ai l'impression d'être encore devant un cas insurmontable. Alors j'espère que vous allez pouvoir m'aider.

Voilà actuellement je cherche les 2 fichiers suivants:
~/bin/toto.bat
~/runtime/toto.bat

Comme dans mon exemple, les deux fichiers portent toujours le même nom et sont toujours situés dans les sous-dossiers "bin" et "runtime"
Mon problème, c'est que les arborescences peuvent être alléatoires. Exemple :
C:\bateau\maison\bin\toto.bat
ou
C:\cherche\tu\trouveras\bin\toto.bat
ou
D:\alors\tu\trouves\runtime\toto.bat (Ah oui, les fichiers peuvent aussi être situés sur le disque C: ou D:)
ou
C:\cest\pas\facile\hein\runtime\toto.bat
etc...

Et pour corser le tout, il faut que le code variabilise les deux résultats qui seront trouvés:
exemple:
echo %resultat1%
C:\cherche\tu\trouveras\bin\toto.bat
echo %resultat2%
D:\cest\pas\facile\hein\runtime\toto.bat

Pas simple non ?
En tout cas, moi je patine...
je compte sur vous :-)
Ka-El
Afficher la suite 

3 réponses

Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2148
0
Merci
Salut,

Facile à faire mais faut pas être pressé, surtout si tu as une grosse arborescence :

@echo off
Setlocal EnableExtensions DisableDelayedExpansion
chcp 28591 >nul

call :recherche "toto.bat" resultat1
call :recherche "titi.bat" resultat2

echo. & echo Resultat1 = %resultat1%
echo. & echo Resultat2 = %resultat2%

echo. & pause
exit


:recherche

for %%A in (C,D) do (

%%A:
for /f "delims=" %%J in ('2^>nul dir /b /a-d /s %1') do set %2=%%J

)

goto :eof

Le fait que les fichiers se trouvent à chaque fois dans bin et runtime est anecdotique, ça ne nous aide en rien.
Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Salut Barnabe,
Toujours aussi efficace à ce que je vois ! :-)

Ceci dit, tu as omis un détail important dans ton code:
Les deux fichiers ont, en effet, le même nom ("toto.bat") et les seuls qui m'intéressent sont situé dans les sous-dossiers ~/bin et ~/runtime
Je précise les dossiers, car il peut très bien y avoir d'autres fichiers "toto.bat" sur mon serveur mais dans d'autres répertoires (et qui donc ne m'intéressent pas)

Tu as une idée ?
@+
barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2148 > Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Ah ok, donc ce n'est pas si anecdotique que ça finalement ;)

Je vais voir ce qu'on peut faire.
Commenter la réponse de barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2148
0
Merci
Voilà la nouvelle version :
@echo off
Setlocal EnableExtensions EnableDelayedExpansion
chcp 28591 >nul

set cible=toto.bat

for %%A in (C,D) do (

%%A:

for /f "delims=" %%J in ('2^>nul dir /b /a-d /s "%cible%"') do (

(echo %%~pnxJ | findstr "bin\\%cible%" >nul) && set resultat1=%%J
(echo %%~pnxJ | findstr "runtime\\%cible%" >nul) && set resultat2=%%J

)
)

echo. & echo Resultat1 = !resultat1!
echo. & echo Resultat2 = !resultat2!

echo. & pause
exit

barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2148 > Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Ok pour le \ le script devrait donc fonctionner.

Le script cherche dans C: et D: comme demandé initialement, il peut être lancé de n'importe quel endroit.
Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
J'ai refait l'essai, mais je confirme ça ne marche pas:


De ton côté, c'est OK ?

Actuellement les deux fichiers toto.bat recherchés sont sous:
C:\TRI\Crossfic_TRI\runtime
C:\entreprise\bck_dowload\bin

merci ! :-)
barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2148 > Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Est-ce que le fichier toto.bat possède des attributs particuliers ? (archive, fichier système, ...)

Est-ce que l'utilisateur qui lance le script a la permission de lecture pour ces arborescences ?

Est-ce que cette ligne est bien présente : Setlocal EnableExtensions EnableDelayedExpansion

Essaye de rajouter le commutateur /i à la commande FINDSTR :
(echo %%~pnxJ | findstr /i "bin\\%cible%" >nul) && set resultat1=%%J
(echo %%~pnxJ | findstr /i "runtime\\%cible%" >nul) && set resultat2=%%J
Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
J'ai recréé les fichiers pour être sûr de ne pas être confronté à un pb de droits.
La ligne Setlocal EnableExtensions EnableDelayedExpansion est bien présente.
J'ai ajouté le /i comme tu me l'as indiqué, mais le script ne renvoit toujours aucun résultat.
je précise que je lance le script en tant qu'administrateur.

C'est d'autant plus bizarre, si de ton côté tu parviens à faire aboutir le code
barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2148 > Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Je n'ai pas besoin de le lancer en admin.

Je viens de remarquer un problème en lançant une commande directement dans la console, je vais corriger le script car le problème vient sûrement de là.
Commenter la réponse de barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2148
0
Merci
Voilà la correction du problème :
@echo off
Setlocal EnableExtensions EnableDelayedExpansion
chcp 28591 >nul

set cible=toto.bat

for %%A in (C,D) do (

echo %CD% | find /i "%%A:" && cd\ || %%A:

for /f "delims=" %%J in ('2^>nul dir /b /a-d /s "%cible%"') do (

(echo %%~pnxJ | findstr /i "bin\\%cible%" >nul) && set resultat1=%%J
(echo %%~pnxJ | findstr /i "runtime\\%cible%" >nul) && set resultat2=%%J

)
)

echo. & echo Resultat1 = !resultat1!
echo. & echo Resultat2 = !resultat2!

echo. & pause
exit

J'espère que c'est bon cette fois-ci.

Le problème vient de la commande pour changer de disque (C: ou D:), en fait si on se trouve déjà sur C: mais qu'on veut remonter à la racine, la commande C: n'a aucun effet il faut utiliser cd\ à la place.


“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Ah ouais ! c'est bien mieux :-)
Par contre, (je vais être un peu chiant), sais-tu pourquoi quand on lance le programme, on a la ligne "C:\Windows\system32" qui s'affiche en haut de la fenêtre de recherche ?

Sinon, c'est nickel.
J'apprécie beaucoup ton aide. Encore merci ! :-)
barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2148 > Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Voilà une correction :

@echo off
Setlocal EnableExtensions EnableDelayedExpansion
chcp 28591 >nul

set cible=toto.bat

for %%A in (C,D) do (

(echo %CD% | find /i "%%A:" >nul) && cd\ || %%A:

for /f "delims=" %%J in ('2^>nul dir /b /a-d /s "%cible%"') do (

(echo %%~pnxJ | findstr /i "bin\\%cible%" >nul) && set resultat1=%%J
(echo %%~pnxJ | findstr /i "runtime\\%cible%" >nul) && set resultat2=%%J

)
)

echo. & echo Resultat1 = !resultat1!
echo. & echo Resultat2 = !resultat2!

echo. & pause
exit
Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Ah bizarre, il me semblait que je n'avais pas cette ligne précédemment.
En tout cas, encore merci.
Bon week-end et peut être à bientôt pour de nouvelles aventures ;-)
barnabe0057
Messages postés
12334
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 août 2019
2148 > Ka-El
Messages postés
195
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
8 août 2019
-
Merci bon week-end également !

A bientôt.
Commenter la réponse de barnabe0057