Chercher deux fichiers dans répertoires différents et variabiliser la résultat

Résolu/Fermé
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 - 1 août 2019 à 16:05
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - 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

3 réponses

barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 906
1 août 2019 à 17:32
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.
0
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
2 août 2019 à 08:42
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 ?
@+
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 906 > Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
2 août 2019 à 09:23
Ah ok, donc ce n'est pas si anecdotique que ça finalement ;)

Je vais voir ce qu'on peut faire.
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 906
2 août 2019 à 09:50
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

0
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
2 août 2019 à 10:45
Merci pour ton implication Barnabe ;-)
Effectivement je suis conscient que ma demande est un peu tordue...
D'ailleurs, de mon côté le script ne fonctionne pas.
ça marche pour toi ?

En passant, peux -tu stp me dire à quoi sert la ligne suivante ?:
chcp 28591 >nul

Merci encore
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 906 > Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
2 août 2019 à 10:57
Cette commande modifie le codepage, elle est généralement utilisée pour afficher correctement les caractères accentués.

Si le script ne fonctionne pas, à mon avis ça provient du filtre de la commande FINDSTR.

En effet il y a une bizarrerie dans ta demande : les arborescences windows utilisent le \ tandis que les arborescences GNU/Linux utilisent le / . Ce script est un script windows mais toi tu cherches une arborescence Linux, je ne comprends pas très bien.
0
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
2 août 2019 à 11:15
Tu as raison nous sommes bien sur du "\"
Ma demande initiale était correcte mais pas ma réponse qui a suivi (c'est mon côté étourdi ça !)

En fait, de mon côté quand je lance ton script, la recherche a l'air de bien se faire mais celle-ci n'affiche au final aucun résultat (alors que j'ai bien mes deux fichiers toto.bat dans les arborescences ~\bin et ~\runtime)

Est-ce que ton script est fonctionnel dans n'importe quel emplacement du serveur ?
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 906 > Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
Modifié le 2 août 2019 à 11:31
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.
0
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
Modifié le 2 août 2019 à 14:07
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 ! :-)
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 906
Modifié le 2 août 2019 à 14:59
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.

0
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
2 août 2019 à 15:04
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 ! :-)
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 906 > Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
Modifié le 2 août 2019 à 15:10
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
0
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
2 août 2019 à 15:14
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 ;-)
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 906 > Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
2 août 2019 à 15:15
Merci bon week-end également !

A bientôt.
0