Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1153 connectés 

  FORUM HardWare.fr
  Programmation

  [batch avancé] pour les forts

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[batch avancé] pour les forts

n°77803
altus
garder le sang froid
Posté le 03-12-2001 à 23:05:02  profilanswer
 

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
mood
Publicité
Posté le 03-12-2001 à 23:05:02  profilanswer
 

n°77810
bjone
Insert booze to continue
Posté le 03-12-2001 à 23:30:51  profilanswer
 

Citation :

depuis un peu partout


 
haaaaaaaaaa ça c'est limpide.

n°77811
Obscure
L'obscurité n'est pas claire
Posté le 03-12-2001 à 23:34:52  profilanswer
 

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 !  ;)

n°77819
altus
garder le sang froid
Posté le 03-12-2001 à 23:48:39  profilanswer
 

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:

n°77824
bjone
Insert booze to continue
Posté le 03-12-2001 à 23:57:10  profilanswer
 

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

n°77826
bjone
Insert booze to continue
Posté le 04-12-2001 à 00:00:28  profilanswer
 

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 ..............

n°77827
altus
garder le sang froid
Posté le 04-12-2001 à 00:02:28  profilanswer
 

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

n°77828
altus
garder le sang froid
Posté le 04-12-2001 à 00:04:12  profilanswer
 

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.

n°77829
phraide
Posté le 04-12-2001 à 00:07:18  profilanswer
 

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.
n°77830
altus
garder le sang froid
Posté le 04-12-2001 à 00:09:15  profilanswer
 

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 !

mood
Publicité
Posté le 04-12-2001 à 00:09:15  profilanswer
 

n°77834
altus
garder le sang froid
Posté le 04-12-2001 à 00:14:48  profilanswer
 

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

n°77927
JPA
Posté le 04-12-2001 à 10:55:37  profilanswer
 

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]

n°78044
altus
garder le sang froid
Posté le 04-12-2001 à 13:48:47  profilanswer
 

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]

n°78049
JPA
Posté le 04-12-2001 à 14:00:02  profilanswer
 

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+

n°78212
JPA
Posté le 04-12-2001 à 18:17:26  profilanswer
 

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

n°78222
altus
garder le sang froid
Posté le 04-12-2001 à 19:01:41  profilanswer
 

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

n°78228
altus
garder le sang froid
Posté le 04-12-2001 à 19:18:31  profilanswer
 

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 :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [batch avancé] pour les forts

 

Sujets relatifs
[BATCH] renommage de bocou de fichiersen batch virer un caractere ds une ligne
[BATCH] Récupérer le code de retour de la dernière commande[batch] lancer un .bat dans un .bat...
batchBatch sous dos
Problème avec un BatchPOUR LES PROS DU C++ OU DE LA PROGRAMMATION BATCH
Créer 1 programme batch et l'enregister en .exe ?[batch] validation de reboot
Plus de sujets relatifs à : [batch avancé] pour les forts


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR