[batch avancé] pour les forts

pour les forts [batch avancé] - Programmation

Marsh Posté le 03-12-2001 à 23:05:02    

j'aime pas quand les gens mettent ce titre, mais là ça m'a vraiment pas l'air facile à faire...
 
Alors :
 
J'aimerais faire un script batch qui copierait des fichiers disons .txt depuis un peu partout vers un répertoire spécifié disons c:\textes
 
Ca ne marche pas avec copy (logique) et xcopy non plus (il copie l'arborescence avec)
 
Merci de votre aide !


---------------
Ganz kühl bleiben! JM. | Section Audio
Reply

Marsh Posté le 03-12-2001 à 23:05:02   

Reply

Marsh Posté le 03-12-2001 à 23:30:51    

Citation :

depuis un peu partout


 
haaaaaaaaaa ça c'est limpide.

Reply

Marsh Posté le 03-12-2001 à 23:34:52    

tu veux dire, il scan tous le dur a la recherche des .txt, et les copie dans un rép précis ? houla, c vrai que ca doit pas être tout simple ! enfin, je laisse al parole aux autres !  ;)

Reply

Marsh Posté le 03-12-2001 à 23:48:39    

bjone a écrit a écrit :

Citation :

depuis un peu partout


 
haaaaaaaaaa ça c'est limpide.  




 
pour être plus précis :
 
j'ai un répertoire de films qui ont chacun leur fichier .nfo
donc on a en gros
d:\films\french\film1\film1.nfo
d:\films\french\film2\film2.nfo

 
ces fichiers doivent être copiés vers d:\nfo :
d:\nfo\film1.nfo
d:\nfo\film2.nfo

 
ça va là ? :pt1cable:

Reply

Marsh Posté le 03-12-2001 à 23:57:10    

c'est mieux.
 
j'aurais une solution avec le 4dos.....

Reply

Marsh Posté le 04-12-2001 à 00:00:28    

sinon un truc du gout:
 
*******************
 
:lp
if "%1"=="" goto quit
 
copy %1\*.nfo \nfo
shift
goto lp
 
:quit
 
***********************
 
avec dans ton cas:
 
en étant dans d:\films\french\
 
yo.bat film1 film2 ..............

Reply

Marsh Posté le 04-12-2001 à 00:02:28    

bjone a écrit a écrit :

c'est mieux.
 
j'aurais une solution avec le 4dos.....  




c'est que je me faisais une mauvaise idée du 4dos alors...
 
tu poposes quoi ?
 
Sinon j'ai trouvé ce script, mais j'arrive pas à comprendre ce que fait le gars :
 

Citation :


 Try the following LAKE.BAT to copy a file from anywhere to c:\backup\data\.
 
 @echo off
 if %1!==! goto End
 if not exist c:\backup\nul md c:\backup
 if not exist c:\backup\data\nul md c:\backup\data
 
 if exist c:\~tmp\nul goto Error
 if exist %1 xcopy %1 c:\~tmp\ > nul
 if not exist c:\~tmp\nul for %%c in (echo.Error! goto:Break) do %%c
 
 c:
 cd \~tmp
 lfnfor on
 for %%f in (*.*) do move "%%f" "c:\backup\data\%%f.bak"
 lfnfor off
 
 explorer c:\backup\data
 deltree /y c:\~tmp >nul
 goto End
:Error
 echo. Error:
 echo. "%0" tried to create a new folder
 echo. "c:\~tmp" but this folder already exist!
:Break
 echo.
 pause
:End
 cls

Reply

Marsh Posté le 04-12-2001 à 00:04:12    

bjone a écrit a écrit :

sinon un truc du gout:
 
*******************
 
:lp
if "%1"=="" goto quit
 
copy %1\*.nfo \nfo
shift
goto lp
 
:quit
 
***********************
 
avec dans ton cas:
 
en étant dans d:\films\french\
 
yo.bat film1 film2 ..............  




 
ou ce serait pas mal, sauf que il peut y avoir  
film1\cd1 et  
film1\cd2
 
enfin c'est variable, le .nfo ne se trouve pas toujours au même endroit.

Reply

Marsh Posté le 04-12-2001 à 00:07:18    

unix rulezz
 
find /src -type f -name \*.txt -exec cp {} /dest \;
 
(tu peux trouver un portage de find pour dos/win...)
 
<troll> aller vous coucher ! :D </troll>


---------------
I'm too old for this shit.
Reply

Marsh Posté le 04-12-2001 à 00:09:15    

phraide a écrit a écrit :

unix rulezz
 
find /src -type f -name \*.txt -exec cp {} /dest \;
 
(tu peux trouver un portage de find pour dos/win...)
 
<troll> aller vous coucher ! :D </troll>  




 
chiche j'installe linux !

Reply

Marsh Posté le 04-12-2001 à 00:09:15   

Reply

Marsh Posté le 04-12-2001 à 00:14:48    

en utilisant les pipes ?
 
dir *.nfo /s /b > copy ???

Reply

Marsh Posté le 04-12-2001 à 10:55:37    

Je vais te donner une piste. Je fais mes exemples avec des .xls (j'ai pas de nfo sur mon disque...)
 
N.B. Je suis sous 2000, le résultat peut changer sur Win 9x
Si tu fais :
p:\>dir *.xls /s|find "Répertoire" tu obtiens
 Répertoire de p:\
 Répertoire de p:\A récuperer\COPIE
 Répertoire de p:\_Données\dde67
 
 donc si tu fais :  dir *.xls /s|find "Répertoire" >>toto.bat tu obtiens un fichier contenant les lignes d'instruction suivantes :
 Répertoire de p:\
 Répertoire de p:\A récuperer\COPIE
 Répertoire de p:\_Données\dde67
 
il faut donc maintenant créer un fichier répertoire.bat qui va faire les opérations suivantes :
- remarque préliminaire :  
dans la 1° ligne de mon exemple, les variables suivantes sont définies :
%0 vaut Répertoire
%1 vaut de
%2 vaut p:
 
dans la 2° ligne de mon exemple, les variables suivantes sont définies :
%0 vaut Répertoire
%1 vaut de
%2 vaut p:\A
%3 vaut récuperer\COPIE
 
S'il n'y avait pas d'espace dans les noms de fichier ce serait plus simple...
 
1) Quand il n'y a pas d'espace :
if exist %3 goto espace
copy %2\*.xls c:\repertoire\
:espace
set repert=%2 %3
if not exist %4 goto copie
set repert=%repert% %4
if not exist %5 goto copie
set repert=%repert% %5
etc etc dépend du nombre d'espace que tu peux avoir
        Mais celà ne marche pas si un nom de répertoire contient
        2 espaces consécutifs
:copie
copy %repert%\*.xls c:\repertoire\
 
 
Teste et dis nous si celà marche
 
P.S. :
termine ton batch par :
del toto.bat
set repert=

 

[edtdd]--Message édité par JPA--[/edtdd]

Reply

Marsh Posté le 04-12-2001 à 13:48:47    

JPA a écrit a écrit :

Je vais te donner une piste. Je fais mes exemples avec des .xls (j'ai pas de nfo sur mon disque...)
 
N.B. Je suis sous 2000, le résultat peut changer sur Win 9x
Si tu fais :
p:\>dir *.xls /s|find "Répertoire" tu obtiens
 Répertoire de p:\
 Répertoire de p:\A récuperer\COPIE
 Répertoire de p:\_Données\dde67
 
 donc si tu fais :  dir *.xls /s|find "Répertoire" >>toto.bat tu obtiens un fichier contenant les lignes d'instruction suivantes :
 Répertoire de p:\
 Répertoire de p:\A récuperer\COPIE
 Répertoire de p:\_Données\dde67
 
il faut donc maintenant créer un fichier répertoire.bat qui va faire les opérations suivantes :
- remarque préliminaire :  
dans la 1° ligne de mon exemple, les variables suivantes sont définies :
%0 vaut Répertoire
%1 vaut de
%2 vaut p:
 
dans la 2° ligne de mon exemple, les variables suivantes sont définies :
%0 vaut Répertoire
%1 vaut de
%2 vaut p:\A
%3 vaut récuperer\COPIE
 
S'il n'y avait pas d'espace dans les noms de fichier ce serait plus simple...
 
1) Quand il n'y a pas d'espace :
if exist %3 goto espace
copy %2\*.xls c:\repertoire\
:espace
set repert=%2 %3
if not exist %4 goto copie
set repert=%repert% %4
if not exist %5 goto copie
set repert=%repert% %5
etc etc dépend du nombre d'espace que tu peux avoir
        Mais celà ne marche pas si un nom de répertoire contient
        2 espaces consécutifs
:copie
copy %repert%\*.xls c:\repertoire\
 
 
Teste et dis nous si celà marche
 
P.S. :
termine ton batch par :
del toto.bat
set repert=  




 
merci beaucoup JPA !
 
Je vois à peu près le principe, mais je dois lancer le deuxième bat (repertoire.bat) avec quels paramètres pour qu'il parcourt le fichier toto.bat ?  
 
J'avais pensé faire un dir *.nfo /s /n > listeNFO.txt (il y a au maximum 50 fichiers au total)
mais je ne sais pas comment réutiliser ce fichier qui contient la liste des chemins complets à tous les fichiers .nfo ?
 
(par exemple dans une boucle for qui ferait un simple copy de chacun des fichiers)  
 
 :wahoo:

 

[edtdd]--Message édité par altus--[/edtdd]

Reply

Marsh Posté le 04-12-2001 à 14:00:02    

Non, c'est le contraire...
tu lance toto.bat et il va exécuter :
Répertoire de p:\  
Répertoire de p:\A récuperer\COPIE  
Répertoire de p:\_Données\dde67  
 
comme répertoire est un.bat, il va exécuter répertoire...
 
Zut, je viens de m'apercevoir d'un pb...
Il ne va exécuter que la 1° ligne vu qu'il n'y a pas de call.
 
Je recherche (pas tout de suite) et je reposte
A+

Reply

Marsh Posté le 04-12-2001 à 18:17:26    

j'ai trouvé une solution pour NT 2000, mais pas pour 9x :
 
après avoir créé toto.bat (dans cette méthode, je prèfère l'appeler toto.txt) tu lance la commande suivante :
for /F "tokens=1,2*" %a in (toto.txt) do %a %c
celà va exécuter le progr répertoire.bat avec le bon paramètre
 
Il ne te reste plus qu'à ordonner tout celà et à mettre les commandes dans des batch.
ATTENTION : dans les batch, il te faudra remplacer %a par %%a etc.
 
A+ pour de nouvelles aventures

Reply

Marsh Posté le 04-12-2001 à 19:01:41    

merci t'es génial JPA   :wahoo:  
j'aime bien tes aventures

Reply

Marsh Posté le 04-12-2001 à 19:18:31    

finalement mon script se résume à ça :
 
dir d:\films\_french_\*.nfo /s /b > nfo.txt
for /F  %%a in (nfo.txt) do copy %%a d:\temp\nfo
cls
 
Comme quoi c'est facile quand on sait :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed