Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 3 sur 4
Aller à la page: <  1, 2, 3, 4  >
Copie de fichiers avec critères .
Auteur Message
Répondre en citant
Message Copie de fichiers avec critères . 
Revue du message précédent :

Et voilà mon bon mÔssieur, j'ai retiré le fichier LOG au passage, si tu en as besoin je peux le remettre ...

Enjoy Okay

Code:

@echo off
title - SPEED COPY -  ^| Gmarin ^|
set CHAINE=UNDEF
set DISK=UNDEF
set COUNT=0
:: ##### A modifier #####
set /p CHAINE=Entrer la chaŒne … rechercher \\:
set /p DISK=Entrer le disque de copie ( juste d: ou  f: etc ... ) \\:
:: ######################
echo. &echo.
echo Recherche et copie en cours ....

for /f "tokens=*" %%§ in ('dir c:\*.ini /b /s') do (
  for /f "tokens=*" %%# in ('type "%%§" ^| Find /I "%CHAINE%"') do (
    xcopy /Y "%%~§" "%DISK%%%~p§"
    set /a COUNT+=1
    )
  )
 
echo.
echo --------------------------------------------------
echo Fin de l'op‚ration !
echo --------------------------------------------------
echo %COUNT% fichier(s) .INI copi‚(s) contenant la chaŒne: %CHAINE%.
echo.
pause>nul


Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Copie de fichiers avec critères . 
bonjour Stryk,

On y est presque ! Smile

On est en chemin "absolu" pour la copie, et je voudrais être uniquement en chemin "relatif" :

par exemple source : c:\mon jeu\toto\ vers cible : d:\toto . Mad

Tu vois ce que j'essaie d'expliquer ? Wink



Répondre en citant
Message Copie de fichiers avec critères . 
Mmmmm Rolling Eyes non pas trop ...
Tu m'avais dis vouloir le chemin complet, non ?

Donne moi un autre exemple concret please !




______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message Copie de fichiers avec critères . 
Je ne me souviens pas d'avoir parlé de chemin .... jusqu'à maintenant, mais bon, un vieux, dès fois ..... Embarassed
Arborescence et noms identiques, oui, mais à partir du répertoire sur lequel on effectue la recherche et la copie, donc, "chemin relatif".

Sinon, si mes fichiers et mes répertoires cible sont situés en absolu dans le 5° répertoire à partir de la racine, la copie fait pareil, ce qui ne me sert à rien ..... Neutral



Répondre en citant
Message Copie de fichiers avec critères . 
[quote=gmarin]
Je désire copier sur une autre unité, avec l'arborescence identique les fichiers contenant la chaine de caractères .
[quote]

C'était dans ton 1er post ... Mr. Green

Si je comprend bien, par exemple:
c:\pomme\banane\fichier.ini doit être copié >> d:\banane\fichier.ini
c:\tata\toto\pif\paf\pouf\fichier.ini doit être copié >> d:\pouf\fichier.ini
c'est ça ?
Si oui, je n'ai pas d'astuce ... Laughing




______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message Copie de fichiers avec critères . 
Bon, une arborescence n'est pas un "chemin", ce sont 2 choses bien distinctes en Dos .
Mais je ne vais pas chercher à me justifier là, j'aurais dû le mentionner au départ ! Embarassed


Comme je l'ai dis plus avant, il n'est pas facile de demander de l'aide pour une chose complexe,
en la présentant directement sous sa complexité, surtout quand on est pas spécialiste de l'aide demandée .... Razz

J'aurais dû te dire directement :

C'est dans le répertoire \cars\.\.\.\...... qui est situé à F:\Richard Burns Rally\Cars\.\.\.\......
que je veuxsouhaite copier les fichiers *.ini qui contiennent
la chaîne : [cam_bonnet2] (avec gestion de la casse), fichiers qui sont dans des sous-répertoires
avec des noms en Majuscules & minuscules & des espaces,
dans une autre unité D:, dans le répertoire D:\stockage\RSRBR\réinstallations\Cars\.\.\.\. avec la même arborescence,
mais seulement à partir du répertoire \Cars (ce qu'on appelle "chemin relatif") .

Tu m'aurais giclé directement ..... (enfin, peut-être pas ! Razz )

Bon, je vais faire avec le code que tu m'as élaboré, qui est "super fantastique".
Je n'ai juste qu'une copie du répertoire \Cars à faire pour la poser où je veux, faut que j'arrête d'être fainéant.
Je pense que même en commençant d'apprendre le batch aujourd'hui,
j'aurais été rattrapé par Alzheimer avant d'en avoir réalisé le dixième . Mort de Rire

Un grand merci pour ta patience, et pour l’accueil sur ce forum (accueil exemplaire Mr. Green ).

J'aurais d'autres batches à réaliser, mais qui ne pressent pas, et dont je prendrais le plus grand soin à préparer l'exemple et la demande . Rolling Eyes



Répondre en citant
Message Copie de fichiers avec critères . 
Moi ce que j'ai compris de ta demande c'est:

"pouvoir copier une arborescence à partir d'un dossier source (chemin relatif ou absolu) vers un dossier de destination (chemin relatif ou absolu) en ajoutant un filtre pour les noms des fichiers + un filtre pour le contenu des fichiers". Le tout sans détruire l'arborescence et sans copier les dossiers vides.

corrige moi si je me trompe Question




______________________________________________________
Mes principales réalisations: Cp (batch) et IPSvc (autoit)
Répondre en citant
Message Copie de fichiers avec critères . 
Cαutex a écrit:
Moi ce que j'ai compris de ta demande c'est:

"pouvoir copier une arborescence à partir d'un dossier source (chemin relatif ou absolu) vers un dossier de destination (chemin relatif ou absolu) en ajoutant un filtre pour les noms des fichiers + un filtre pour le contenu des fichiers". Le tout sans détruire l'arborescence et sans copier les dossiers vides.

corrige moi si je me trompe Question
Tu as juste . Razz

Mais je l'ai dit plus haut, une "arborescence" n'est pas un "chemin", ce sont 2 choses bien différentes .
L'arborescence, c'est la dénomination littéraire d'une structure de dossiers .
Le chemin, c'est l'emplacement où se trouvent les limites de cette structure sur une unité .

Il se trouve que par défaut, le batch prend en compte le "chemin absolu d'une structure", c'est à dire de son début à sa fin, sans exclusion.
Il se trouve que j'ai oublié de mentionner que je voulais tenir compte du "chemin relatif", qui est pour moi plus logique .

Je sais que le batch sait dans ses commandes prendre en compte le chemin relatif, mais nul comme je suis,
je n'ai pas encore trouvé comment l'appliquer au code que Stryk a programmé . Okay
Mais j'y arriverais ..... Very Happy
Vive Google et les tutos sur le batch ....... Mort de Rire



Répondre en citant
Message Copie de fichiers avec critères . 
gmarin a écrit:
Bon, une arborescence n'est pas un "chemin", ce sont 2 choses bien distinctes en Dos .

Ah bah je croyais, désolé pour ce malentendu Wink

si cela peut t'aider, voici l'aide "for":
Code:

    %~I         - étend %I en supprimant les guillemets (")
    %~fI        - étend %I en nom de chemin d'accès reconnu
    %~dI        - étend %I en lettre de lecteur uniquement
    %~pI        - étend %I en chemin d'accès uniquement
    %~nI        - étend %I en nom de fichier uniquement
    %~xI        - étend %I en extension de fichier uniquement
    %~sI        - chemin étendu contenant uniquement des noms courts
    %~aI        - étend %I en attributs du fichier
    %~tI        - étend %I en date/heure du fichier
    %~zI        - étend %I en taille du fichier
    %~$PATH:I   - parcourt les répertoires de la variable
                   d'environnement PATH et étend %I en nom du
                   premier fichier reconnu trouvé. Si le nom de la
                   variable d'environnement n'est pas défini ou
                   que le fichier n'est pas trouvé par la recherche,
                   alors ce modificateur étend en chaîne vide

Vous pouvez combiner les modificateurs pour obtenir des résultats composés :

    %~dpI       - étend %I en lettre de lecteur et chemin d'accès uniquement
    %~nxI       - étend %I en nom de fichier et extension uniquement
    %~fsI       - étend %I en nom de chemin complet avec noms courts
                   uniquement
    %~dp$PATH:i - parcourt les répertoires listés dans la variable
                   d'environnement PATH à la recherche de %I et étend
                   en lettre de lecteur du premier trouvé.
    %~ftzaI     - étend %I en DIR comme ligne en sortie


Je t'avoues que je n'ai toujours pas compris ce que tu veux exactement Mr. Green
Si je peux encore t'aider, ce sera avec plaisir Okay




______________________________________________________


L'ignorance est un fléau qui engendre la haine et la mort
La connaissance est une arme qui surpasse toutes les autres
Partagez votre savoir, sinon il sera perdu à jamais
Répondre en citant
Message Copie de fichiers avec critères . 
Voici ce que je te propose:

adapte la ligne " call:cp "c:\chemin source" "*.ini *.txt" "c:\chemin destination" "chaines a chercher dans les fichiers (optionnel)" "
Code:

@echo off
setlocal enabledelayedexpansion
call:cp "c:\chemin source" "*.ini *.txt" "c:\chemin destination" "chaines a chercher dans les fichiers (optionnel)"
cls
echo.%compteur_2%/%compteur_3% fichiers trait‚s
echo.%compteur_1% copies et %erreurs% erreurs
pause
exit /b

:cp CHEMIN_SOURCE FILTRE_FICHIER CHEMIN_DESTINATION [CHAINES_FICHIER] //ATTENTION, point d'exclamation non pris en charge
   set src=%~1
   set erreurs=0
   set compteur_1=0
   set compteur_2=0
   set compteur_3=0
   set tmp1=%src%?
   :boucle_1
   if not "%tmp1:~0,1%"=="?" (
      set tmp1=%tmp1:~1%&set /a tmp2+=1
      goto boucle_1
   )
   for /r "%src%" %%i in (%~2) do (
      set /a compteur_3+=1&title traitement du fichier !compteur_3! ...
      set tmp1=%%~dpi&set tmp3=1
      if not "%~4"=="" call:recherche "%%~fi" "%~4"
      if "!tmp3!"=="1" call:traite "%%~di" "%%~pi" "%%~ni" "%%~xi" "%%~zi" "%%~ti" "%~3"
   )
goto:eof

:traite LECTEUR CHEMIN NOM EXT TAILLE TEMPS CHEMIN_DESTINATION
   set sd=!tmp1:~%tmp2%!
   if not exist "%~7%sd%" md "%~7%sd%"
   if not exist "%~7%sd%%~3%~4" (
      xcopy "%src%%sd%%~3%~4" "%~7%sd%" >nul
      if "%errorlevel%"=="0" (set /a compteur_1+=1) else set /a erreurs+=1
   )
   set /a compteur_2+=1
goto:eof

:recherche
   set tmp3=0
   for /f "tokens=*" %%I in ('type "%~1"^|findstr /L "%~2"') do set tmp3=1&goto:eof
goto:eof





______________________________________________________
Mes principales réalisations: Cp (batch) et IPSvc (autoit)
Répondre en citant
Message Copie de fichiers avec critères . 
Cà ne voulait pas marcher ...... Mad
Ta solution me convient, je l'adopte avec une petite modification à l'avant-dernière ligne :

Code:
('type "%~1"^|findstr /L /i /S "%~2"')

/i pour la casse possible dans l'écriture de la chaine (çà dépend de l'auteur du fichier *.ini)
/s : recherche les fichiers concordants dans le répertoire en cours ainsi que dans tous ses sous-répertoires.

Là, la recherche va bien.

Par contre c'est long, il y a 1410 fichiers *.ini à scruter(aujourd'hui...) pour 463 retenus .

Je te remercie de ta contribution, je vais enfin pouvoir éliminer un problème qui m'agaçait dans un loisir ! Razz


Confidence, j'avais posté chez Atase avant Xoo.it.... et je suis venu ici, parce que les propositions de code ne résolvaient pas
ce que je recherchais.
Donc, en parallèle, Schoon sur Atase a continué, comme Stryk et toi Cautex sur ce forum,
et m'a trouvé également une solution (scrutation ultra-rapide Shocked ).

Je donne le code, afin que cela puisse servir à tout le monde :

Code:

:: ATASE - Schoon
:: adapter la valeur !var:~nb! en fonction du path désiré pour la cible .

::exemple: L:\temp\cars =5 (T de temp étant = à 1)
::------------123456789

SETLOCAL enableDelayedExpansion
FOR /F "delims=" %%A IN ('FINDSTR /I /S /M /C:[Cam_bonnet2] *.ini') DO (
SET var=%%~pA
SET var=!var:~5!
XCOPY "%%A" "m:!var!"
)
pause


Merci pour tout .



Répondre en citant
Message Copie de fichiers avec critères . 
Salut,

En effet Atase à trouvé une solution plus directe. Par contre le paramètre /S pour findstr dans mon batch ne sert a rien puisque findstr reçois le chemin absolu d'un fichier. C'est la boucle for /r qui s'occupe de parcourir l'arborescence en filtrant les fichiers.

l'autre topic




______________________________________________________
Mes principales réalisations: Cp (batch) et IPSvc (autoit)
Répondre en citant
Message Copie de fichiers avec critères . 
J'ai testé la solution d'atase et chez moi son batch ignore certains fichiers contenant la chaine. normal ?

EDIT: Est-ce que tu a donc le même résultat avec les deux batch ? si c'est non ya un problème^^




______________________________________________________
Mes principales réalisations: Cp (batch) et IPSvc (autoit)
Répondre en citant
Message Copie de fichiers avec critères . 
Cαutex a écrit:
Salut,

En effet Atase à trouvé une solution plus directe. Par contre le paramètre /S pour findstr dans mon batch ne sert a rien puisque findstr reçois le chemin absolu d'un fichier. C'est la boucle for /r qui s'occupe de parcourir l'arborescence en filtrant les fichiers.

l'autre topic

Bonjour Cautex,

C'est juste, je viens de réessayer ...... Embarassed
C'est seulement la /i qui est nécessaire chez moi et par ma faute !
J'avais indiqué la chaine en minuscules, alors que j'avais procédé auparavant à une modification
dans les fichiers pour qu'elle commence par une majuscule ..... pour tester et je n'avais pas remis en ordre ... Mad
Pour le coup, 0 fichiers trouvés, et j'ai bêtement mis les 2 commutateurs, sans procéder à une discrimination . Bannir

Mille excuses Embarassed

Cαutex a écrit:
J'ai testé la solution d'atase et chez moi son batch ignore certains fichiers contenant la chaine. normal ?

Sur un test que j'ai effectué dans le forum ?



Répondre en citant
Message Copie de fichiers avec critères . 
non j'ai simplement tenté de recréer une arborescence avec des fichiers ini différents au possible et ceux contenant la chaine recherchés ne sont pas tous trouvé avec la solution d'atase, apparemment quand une ligne d'un fichier contient exactement la chaine à rechercher sans rien d'autre. Sa doit être un effet indésirable de la commande findstr pacque je ne vois pas d’où sa peut venir.




______________________________________________________
Mes principales réalisations: Cp (batch) et IPSvc (autoit)
Répondre en citant
Message Copie de fichiers avec critères . 
Cαutex a écrit:
non j'ai simplement tenté de recréer une arborescence avec des fichiers ini différents au possible et ceux contenant la chaine recherchés ne sont pas tous trouvé avec la solution d'atase, apparemment quand une ligne d'un fichier contient exactement la chaine à rechercher sans rien d'autre. Sa doit être un effet indésirable de la commande findstr pacque je ne vois pas d’où sa peut venir.

Tu as utilisé la ligne de code de FINDSTR identique à celle du code ci-dessus ?



Répondre en citant
Message Copie de fichiers avec critères . 
bien-sûr ^^




______________________________________________________
Mes principales réalisations: Cp (batch) et IPSvc (autoit)
Message Copie de fichiers avec critères . 


Montrer les messages depuis:
Répondre au sujet Page 3 sur 4
Aller à la page: <  1, 2, 3, 4  >
  



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