Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Ce sujet est verrouillé; vous ne pouvez pas éditer les messages ou faire de réponses. Page 1 sur 1
[RESOLU] Move fichier si contenu fichier
Auteur Message
Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Bonjour,

Voilà, j'ai un répertoire de 19000 fichier txt à trier (je dois créer le répertoire bon, douteux et mauvais)
je veux lire les fichiers .txt du répertoire principal "ensemblefichiers" et voir si la chaine "Good" existe dans le fichier.txt par exemple

Si le fichier contiens la chaine good, je déplace le fichier dans le répertoire bon
Si le fichier contiens la chaine douteux, je déplace le fichier dans le répertoire douteux
Si le fichier contiens la chaine mauvais, je déplace le fichier dans le répertoire mauvais

Le code pour les fichiers bon : Les valeurs testés avec powerbatch en echo son bonne mais errorlevel = toujours à 1, si je suprime errolevel il copie tout dans le répertoire bon sinon il quitte

En espèrant avoir une aide, merci par avance.
Ce batch en prévision d'une analyse de registre par la suite.
cordialement,


Code:

setlocal ENABLEDELAYEDEXPANSION
set $recherche="good"
set $RepLire=C:\Users\Thierry
set $CreatRep=C:\Users\Thierry\bon

pushd "%$Replire%"&md "%$CreatRep%"
for %%a in (*.txt) do (call :cherche %%a)
popd
goto :end

:cherche
echo ************* Recherche chaine good en cours .........
find /C /I %$recherche% %1
rem teste si fichier existe déplace fichier dans repertoire bon
if !errorlevel!==0 (
echo **************************** MOVE
if not exist "%$CreatRep%\%1" (move "%$Replire%\%1" "%$CreatRep%\%1")
)

echo Termin‚
:end
endlocal
goto :menu




Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Salut,

Vu que c'est mon code que tu présentes ici je vais essayer de le corriger ici également !
C'est de l'aide en stéréo....

Tu ne peux pas mettre ceçi dans le ":end"

Code:

:end
endlocal
goto :menu


ça te tue la boucle !!!
Il ne doit rien y avoir après le :end parce qu'à chaque itération le call va jusqu'au bout du fichier et retourne dans la boucle for. C'est pour ça que ton errorlevel à toujours la même valeur.

si tu veux mettre d'autres commandes en sortie du "FOR" mets les ici :


Code:


pushd "%$Replire%"&md "%$CreatRep%"
for %%a in (*.txt) do (call :cherche %%a)
popd
endlocal
goto :menu









______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Bonjour sachadee,

Désolé pour la stéréo, c'est pas manque de chercher la solution
par contre ton explication me fais comprendre la fin de boucle for Okay
je suis venu ici, pour la simple raison que le forum est plus centré sur le batch
Tu es très sympa sachadee de l'aide que tu m'apportes, et je posterais seulement ici en se qui concerne le Batch.

après modification :
errorlevel reste à 1
move s'execute
bon il manque un teste après réflexion, si recherche=good car il move tous les fichiers qui n'existe pas dans bon sinon
il sort tout de même du for au premier Move

par contre j'utilise powerbatch, et c'est un PC 64 bits donc la compile impossible (au cas ou l'info doit être importante)

je posterais le code tout de même une fois fini. ici promis Wink

cordialement



Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Salut,

essaye de faire le find en manuel et test l'errorlevel, pour voir si il reste toujours à 1.




______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Re,

j'ai testé le find, la valeur de la chaine de recherche est correcte et le nom de fichier aussi

le truc est que dans l'affichge du find j'ai un affichage du style -------------------- nom fichier, alors j'ai mis un < pour l'enlever
la valeur de errolevel reste à 1

je vais refaire le teste et te donner le résultat en image avec le < et sans
cordialement



Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Bon voilà,

dans le teste j'ai placé 3 echo, il teste passe maintenant mais il m'ouvre le bloc note.
donc le find fonction et errorlevel, je place le code et l'image
mais pourquoi ?
Il faut peut être temporisé
j'ai retiré le end

Code:

setlocal ENABLEDELAYEDEXPANSION
set $recherche="good"
set $RepLire=C:\Users\Thierry
set $CreatRep=C:\Users\Thierry\bon
rem cd %$RepLire%

pushd "%$Replire%"&md "%$CreatRep%"
for %%a in (*.txt) do (call :cherche %%a)
popd
endlocal
rem goto :end
goto :menu
 
:cherche
echo ************* Recherche chaine good en cours .........
find /C /I %$recherche% %1
echo %$recherche% %1
echo %errorlevel%
pause
rem teste si fichier existe déplace fichier dans repertoire bon
if !errorlevel!==0 (
echo **************************** MOVE
if not exist "%$CreatRep%\%1"(move "%$Replire%\%1" "%$CreatRep%\%1")
)
rem :end
    pause






Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Bon on reprend tout et on recommence tu n'enlève pas le :end :
execute le en réel

Execute ce code et fait une capture d'écran :


Code:

@echo off
cls
setlocal ENABLEDELAYEDEXPANSION
set $recherche="good"
set $RepLire=C:\Users\Thierry
set $CreatRep=C:\Users\Thierry\bon

pushd "%$Replire%"&md "%$CreatRep%"
for %%a in (*.txt) do (call :cherche %%a)
popd
echo Termin‚
goto :end

:cherche

echo ------
echo traitement de : %1
find /C /I %$recherche% %1
echo Errorlevel est égal a  : %errorlevel%
echo ------
echo.

rem teste si fichier existe déplace fichier dans repertoire bon
rem if !errorlevel!==0 (
rem echo MOVE
rem if not exist "%$CreatRep%\%1" (move "%$Replire%\%1" "%$CreatRep%\%1"))


:end









______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Voilà la capture





Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Les valeurs sont logiques, seul le bloc note s'ouvre mais pas en direct comme tu viens me le faire faire



Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Excuse-moi pourquoi me parles-tu de bloc note ?
tous les errorlevel sont juste ?




______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
Oui, alors le programme fonction très bien maintenant mais à chaque lecture il m'affiche le fichier .txt dans le bloc-notes
il ouvre le bloc-notes, alors là, et à chaque lecture



Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
re

je place le code en entier avec les trois conditions
le fichier est bien lu
toujours le bloc-notes qui s'ouvre alors pas de move

autant que je travail sur le code complet

Code:


rem Déclaration variables

cls
setlocal ENABLEDELAYEDEXPANSION
set count=0
set $recherche="good"
set $recherche2="Douteux"
set $recherche3="infection"

rem répertoire ou son les fichiers à trier
set $RepLire=C:\Users\Thierry
rem Répertoire ou son les fichiers correcte
set $CreatRepBon=C:\Users\Thierry\bon
rem répertoire ou son les fichiers douteux
set $CreatRepDouteux=C:\Users\Thierry\Douteux
rem répertoire ou son les fichiers mauvais
set $CreatRepMauvais=C:\Users\Thierry\Mauvais

pushd "%$Replire%"&md "%$CreatRepBon%"&md "%$CreatRepMauvais%"&md "%$CreatRepDouteux%"
echo ******************** Transfert en cours **************************

for %%a in (*.txt) do (call :cherche %%a)

popd
echo ******** Vous avez tranf‚r‚ %count% fichier(s)
echo ******************************************************************
pause
endlocal
goto :end
cls
goto :menu
 
:cherche

rem Lecture et recherche de la chaine de good
find /C /I %$recherche% %1
rem teste si fichier existe, déplace fichier dans repertoire bon
if !errorlevel!==0 (
set count+=1
if not exist "%$CreatRepBon%\%1"(move "%$Replire%\%1" "%$CreatRepBon%\%1")
)

rem ===========================================================================

rem Lecture et recherche de la chaine de Douteux
find /C /I %$recherche2% %1
rem teste si fichier existe, déplace fichier dans repertoire Douteux
if !errorlevel!==0 (
set /A count+=1
if not exist "%$CreatRepDouteux%\%1"(move "%$Replire%\%1" "%$CreatRepDouteux%\%1")
)

rem ===========================================================================

rem Lecture et recherche de la chaine mauvaise
find /C /I %$recherche3% %1
rem teste si fichier existe, déplace fichier dans repertoire Mauvais
if !errorlevel!==0 (
set /A count+=1
if not exist "%$CreatRepMauvais%\%1"(move "%$Replire%\%1" "%$CreatRepMauvais%\%1")
)

:end





Répondre en citant
Message [RESOLU] Move fichier si contenu fichier 
J'ai trouvé l'erreur dingue Smile

if not exist "%$CreatRepBon%\%1"(move "%$Replire%\%1" "%$CreatRepBon%\%1")

entre le " et ( il manquait un espace

merci pour ton aide

c'est résolu Okay



Message [RESOLU] Move fichier si contenu fichier 


Montrer les messages depuis:
Ce sujet est verrouillé; vous ne pouvez pas éditer les messages ou faire de réponses. Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch