Batch localisateur

Fermé
Batcher_debutant - 4 mai 2012 à 23:57
 Utilisateur anonyme - 8 mai 2012 à 20:36
Bonjour,

J'ai créé un fichier batch qui devrait localiser un fichier/dossier.
Malheureusement, il ne marche pas.
De plus, si vous savez, y aurait-il un moyen d'écrire le chemin à suivre pour retrouver ce fichier/dossier ?

Mon programme :

@echo off
@title Localisateur

echo As-tu le fichier ...?
set /p var= Votre ficher ?
for %var% in (C:, D:) if exist %var% echo trouve! else pas trouve!

:fin
pause

Je vous explique ma logique (malheureusement fausse ^^)
J'ai mis C: et D: car ce sont les deux disques durs que j'ai pour stocker tous mes dossiers et fichiers.
J'ai inséré une variable %var% tel que l'utilisateur nomme le fichier/dossier qu'il recherche.
La commande for recherche le dossier/fichier dans ces 2 disques durs ...
Si cela est possible, pouvez-vous me rajouter des lignes de programme tel qu'il m'indique le chemin à suivre pour retrouver le dossier/fichier ?

Merci d'avance,
A+
A voir également:

3 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 5/05/2012 à 12:54
hello
essayer ce script
@echo off 
setlocal enableDelayedExpansion 
set fich= 
echo As-tu le fichier ...? 
set /p var= Votre ficher ? 
for /f "delims=" %%a in ('dir /b/s C:\%var% D:\%var% 2^>NUL') do ( 
 set fich=%%a 
 echo !fich! 
) 
if "!fich!" == "" echo pas trouve 
:fin 
pause  
1
En revanche, je ne comprend pas à quoi sert le enableDelayedExpansion... Pourrais-tu m'expliquer ? :) D'ailleurs, ton programme s'arrête après avoir saisi le nom du fichier, il ne se passe plus rien et l'invite de commande reste là comme si elle buguait ...
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 6/05/2012 à 08:20
enableDelayedExpansion permet de modifier des variables dans une boucle for.
tu lui a laissé le temps de chercher ?
0
dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 476
5 mai 2012 à 10:01
je crois que tu devrais plutôt utiliser la commande dir pour faire des recherches dans tout le disque. Tu peux trouver des exemples sur le net.
0
Batcher_debutant
5 mai 2012 à 10:28
Désolé, mais je ne suis pas un programmateur très calé, j'essaye juste de faire quelques programmes, et je ne comprends jamais rien quand les sites expliquent comment marchent la commande DIR (je ne sais même pas trop si j'ai compris FOR alors ...)

Pourrais tu m'expliquer vite fait (et en français ;) ) L'utilité de cette commande (et éventuellement celle de FOR s'il te plaît ? :)
Merci d'avance :)
0
dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 476
5 mai 2012 à 10:36
La réponse est en fin de page :
http://1100f.free.fr/Batchs/la_commande_dir.htm
Si tu ne comprends pas la réponse donnée alors tu devrais lire la page entièrement.
0
Merci dsy73, j'ai regardé ton lien et il est assez bien expliqué (on y parle français au moins :D). Alors si j'ai bien compris, si je recherche le fichier Elephant.bat, il me suffirait de rentrer le code suivant :

@echo off
@title Localisateur

echo As-tu ...?
DIR (C:, D:) Elephant /A .bat -H -S -D

:fin
pause

Peux-tu me confirmer que mes petites cellules grises ont compris ? ;D

Merci à toi aussi dubcek, j'essaierai tes lignes de programmation :)
0
Batcher_debutant
5 mai 2012 à 17:07
Juste, je fais comment pour changer de fichier dans l'invite de commande, parce que là je suis obligé de modifier le script ...
0
dsy73 Messages postés 9252 Date d'inscription dimanche 22 août 2010 Statut Contributeur Dernière intervention 23 octobre 2020 2 476
5 mai 2012 à 17:27
Non je ne crois pas que cela fonctionnera. Par contre le code de dubcek me semble correct. Pour le nom du fichier, utilise un paramètre en ligne de commande : <nom du batch.bat> <nom du fichier recherché>
Tu auras le nom du fichier dans la variable %1 (%2 si tu mets un second paramètre)
0
Salut


J'ai codé déjà un programme de recherche.


Je vais te copier le CS, à toi de le modifier à ta guise.
Sache qu'il fonctionne


@echo off  
title ATS  : Agent Tom Search  
color 0E  
SETLOCAL ENABLEDELAYEDEXPANSION  

:debut  
cls  
echo.  
echo          ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  
echo          º   Bienvenue sur ATS, la recherche de fichiers sous DOS   º  
echo          º          DerniSre mise ... jour fait le: 25/08/11          º  
echo          ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  
echo.  
echo Auteur du programme : XX  
echo O-- me contacter : XX  
echo.  
echo /!\ Si besoin de renseignements, merci de m'envoyer un mail (cf mail ci-dessus)  
echo.  
echo Appuyez sur une touche pour lancer le programme  
pause>nul  
goto menu  

:menu  
cls  
If exist "%homedrive%\ATS.txt" del /Q "%homedrive%\ATS.txt"  
echo          ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  
echo          º 1 Introduction                                  º  
echo          º 2 Recherche                                     º  
echo          º 3 Quitter                                       º  
echo          ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  
echo.  
set /p choix=Quelle action effectuer ?   
if %choix%==1 goto debut  
if %choix%==2 goto recherche  
if %choix%==3 goto exit  
goto Error  

:recherche  
cls  
echo Programme de recherche lanc'...  
echo.  
echo Veuillez marquer la lettre du p'riph'rique  pour effectuer la recherche   
echo exemple = C  
set /p  L=  

cls  
echo Veuillez indiquer ce que vous recherchez   
echo exemple = ccleaner  
set /p A=  

cls  
echo --falculatif-- Veuillez indiquer l'extension du fichier recherch'  
echo exemple = txt / exe ...etc...  
set /p EXT=  

cls  
set /A num=0  
for /f "tokens=*" %%b in ('dir /A /B /S "%L%:\*%A%*.*%EXT%*"') do if exist "%%~b" (  
set /A num=!num!+1  
echo !num! - %%b >> "%homedrive%\ATS.txt")  
echo.  
If exist "%homedrive%\ATS.txt" (  
echo Un rapport, intitul' ATS.txt, doit ^tre cr'e, dans la racine du disque dur  
echo Appuyez sur une touche pour l'ouvrir  
pause>nul  
start notepad "%homedrive%\ATS.txt"  
) ELSE (echo D'sol', la recherche n'a rien donn')  
echo.  
echo.  
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  
echo º Recherche termin' ! º  
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  
echo.  
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  
echo º 1 Retour au menu       º  
echo º 2 Quitter le programme º  
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  
echo.  
set /p choix= Veuillez indiquer votre choix :   
if %choix%==1 goto menu  
if %choix%==2 goto exit  

:Error  
echo.  
Echo Cette action n'existe pas. Veuillez appuyer sur une touche pour recommencer  
pause>nul  
goto menu  

:exit  
exit  


Bon courage :)


edit : sinon, voici le fichier.
Agent_Tom_Search32.bat

@+
0
Batcher_debutant
7 mai 2012 à 21:35
Salut,

J'ai juste un petit souci avec ton programme, le fichier que je recherche (je l'ai intitulé Pistolet) porte une extension .bat. J'ai donc entré C (le fichier est dans un dossier sur le bureau), Pistolet, puis bat, mais ton programme ne le repère pourtant pas... Ai-je fait une erreur ou y a-t-il bien une erreur dans ton programme ?

Merci de ta réponse ! :)
P.S. : Es-tu sûr que l'extension soit bien facultative ?
0
Oui, tout à fait :)

Chez moi le programme marche :)



Faut mettre l'extension bat, et non.bat


tu l'as recopié ou tu l'as téléchargé ?


Je viens de tester => il ne fonctionne qu'avec les droits administrateur

'++
0
Batcher_debutant
8 mai 2012 à 20:19
Euuhh, je l'ai recopié (copier/coller quoi ! ^^). Pourquoi, il y a une différence ? Et excuse moi, mais j'ai bien marqué bat, pourtant, il ne le trouve pas.... Et je ne peux pas trop t'aider, le programme est un peu trop compliqué pour moi ^^ Merci de ton aide :)
0
Utilisateur anonyme
8 mai 2012 à 20:36
Pas la peine de m'aider :)

Il fonctionne :)

Une différence entre copier / coller et prendre le fichier d'origine ?


Oui, une sacrée : il y a des caractères spéciaux

Tu copies ces caractères, notepad les prend pour des caractères normaux


@+
0