[batch] sauf

sauf [batch] - Programmation

Marsh Posté le 09-07-2001 à 22:45:03    

est-il possible d'inclure dans un programme en batch la notion "sauf" : supprimer tous les fichiers d'un repertoire, SAUF un  (ou plusieurs) ??

Reply

Marsh Posté le 09-07-2001 à 22:45:03   

Reply

Marsh Posté le 09-07-2001 à 23:09:19    

Une solution qui marche avec 2 fichiers batch :
 

Code :
  1. -> FICHIER suppr.bat
  2. @echo off
  3. for %%a in (*.*) do call dosuppr.bat %%a
  4. -> FICHIER dosuppr.bat
  5. if "%1"=="suppr.bat" goto fin
  6. if "%1"=="dosuppr.bat" goto fin
  7. if "%1"=="Fichier_A_Ne_Pas_Supprimer.fic" goto fin
  8. ...
  9. del %1
  10. :fin


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-07-2001 à 10:26:27    

tu pourrais detailler, stp (a quoi servent les commandes)
 
ca me met "commande ou nom de fichier incorrect"
 
si je veux supprimer des fichiers qui ne sont pas dans le repertoire de ce prog, ou est*ce*que je mets les adresses des fichiers ??

Reply

Marsh Posté le 10-07-2001 à 10:52:41    

Tu crée 2 fichier batch suppr.bat et do suppr.bat
Dans mon exemple : "-> FICHIER suppr.bat" c'était juste pour indiquer le nom du fichier, faut pas mettre çà dedans, c'est pas  
des commandes batch !
 
Le fichier suppr.bat :
 
@echo off
for %%a in (*.*) do call dosuppr.bat %%a
 
Le @echo off, c'est pour que les commandes ne s'affichent pas à l'écran
le for %%a in ..., c'est une boucle qui va donner à %a les valeurs successives de ce qu'il y a dans entre parenthèse. Ce peut être une énumération : (a, b, c, d, toto, slurp) ou comme  dans notre cas, un chemin et une spécification de fichier.
J'avais mis *.* ce qui veut dire tous les fichiers, quel que soit leur noms et leur extention, dans le répertoire courrant.
 
Si tu essaye par exemple de taper directement sur la ligne de commande :
for %a in (c:\windows\*.ini) do @echo %a
Il t'affiche la liste des fichier *.ini de windows. C'est un moyen plus compliqué de faire une DIR ;)
 
Remarque : Dans un fichier batch, il faut utiliser %%a et pas %a comme nom de variable dans une boucle for...
 
donc pour chaque fichier de (*.*), la boucle execute la commande située après le do.
 
Dans notre cas, on appelle (call) un fichier batch (dosuppr.bat) avec un paramètre qui est %%a, donc le nom de notre fichier à traiter.
 
Le fichier dosuppr.bat
 
if "%1"=="suppr.bat" goto fin
if "%1"=="dosuppr.bat" goto fin
if "%1"=="Fichier_A_Ne_Pas_Supprimer.fic" goto fin
...
del %1
:fin
 
si un fichier batch recois des paramètres, ils s'appellent %1, %2, %3 ... %9
 
Dans notre cas, un seul paramètre donc %1
 
Ensuite, on vérifie que le fichier doit bien être traité.
if "%1"=="suppr.bat" goto fin
Si %1 est un nom de fichier qu'on ne veut pas supprimer, on va à la fin, (:fin)
 
Enfin, on supprime le fichier !
del %1
 
-------------
 
Maintenant, si tu veut pouvoir utiliser cette procédure en lui indiquant un chemin, il faut l'adapter :
 
Le fichier suppr.bat :
 
@echo off
for %%a in (%1\*.*) do call dosuppr.bat %%a
 
Là, il faut utiliser suppr.bat de la manière suivante :
suppr c:\temp
 
Attention, si tu utilise suppr sans paramètre, le traitement se fera sur la racine \ du disque courrant !
 
Pour faire des test, je te conseil faire çà :
 
Dans suppr.bat, met en premiere ligne:
del c:\testsuppr.txt
 
et dans dosuppr.bat
@echo del %1 >> c:\testsuppr.txt
à la place de  
del %1
 
Cela va te générer un fichier c:\testsuppr.txt qui contiendra la liste des DEL à faire. Il te suffit de le lire pour vérifier que la procédure ne supprime rien d'important.
Tu peut aussi renomer ce ficher en .bat et le lancer pour qu'il fasse les supressions...  
 
OK ?

 

[edtdd]--Message édité par Mara's dad--[/edtdd]


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-07-2001 à 11:41:43    

:sleep:  :sleep:  :sleep:  :sleep:  :sleep:  :sleep:  :sleep:  
j'essaye de comprendre et je reviens  ;)  
 
tu pourrais me montrer comment faire un prog qui del tous les .txt de c:\windows\cookies, SAUF sans nom@sqlforum[1].txt (cookies de hfr) ??
 
merci.

Reply

Marsh Posté le 10-07-2001 à 11:43:50    

Citation :

Dans mon exemple : "-> FICHIER suppr.bat" c'était juste pour indiquer le nom du fichier, faut pas mettre çà dedans, c'est pas  
des commandes batch !


 
 :D

Reply

Marsh Posté le 10-07-2001 à 11:43:51    

Citation :

Dans mon exemple : "-> FICHIER suppr.bat" c'était juste pour indiquer le nom du fichier, faut pas mettre çà dedans, c'est pas  
des commandes batch !


 
 :D

Reply

Marsh Posté le 10-07-2001 à 11:50:58    

Une solution plus simple :
1 - Renomer les fichiers qu'on veux garder ou les protéger en écriture et/ou les cacher !
2 - supprimer les .txt
3 - Faire l'inverse de 1.
 
Exemple avec les permissions :
cd c:\windows\cookies
attrib +H +R nom@sqlforum[?].txt
del *.txt
attrib -H -R nom@sqlforum[?].txt
 
Remarque, j'ai mis ? à la place de 1, car chez moi, j'ai remarqué qu'il y avais sqlforum[1].txt et sqlforum[2].txt.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-07-2001 à 12:08:56    

"valeur de parametre non permise - ?].txt"

Reply

Marsh Posté le 10-07-2001 à 12:09:49    

ca me met ca, mais ca marche  :sarcastic:  :crazy:

Reply

Marsh Posté le 10-07-2001 à 12:09:49   

Reply

Marsh Posté le 10-07-2001 à 12:14:10    

Zarbi !
Chez moi (avec NT4.0) çà marche !
 
Essaye comme çà pour voir :
attrib +H +R "nom@sqlforum[?].txt"


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-07-2001 à 12:55:21    

idem
 
tu saurais pas comment modifier la taille d'un fichier en batch, du genre  faire prendre 3 Mo a un fichier n'en occupant que 2 ??
est-il ainsi possible de faire la manip inverse : faire prndre moins de place a un fichier ??

Reply

Marsh Posté le 10-07-2001 à 13:39:15    

Je vois pas trop l'intéret à augmenter la taille d'un fichier, mais bon, si tu y tiens !
 
Par exemple : si le fichier a.txt fait 2Mo et le fichier b.txt fait 1Mo, "copy a.txt + b.txt c.txt" va créer un fichier c.txt faisant 3Mo et contenant a.txt et b.txt. L'opération inverse ne pourra pas être faite en batch !
 
Sinon, pour réduire la taille d'un fichier, il faut soit enlever une partie des informations qu'il contient, soit le compresser avec des outils genre PKZIP, RAR, ARJ...
 
Remarque : Ces outils sont en général capable de découper le résultat final en plusieurs fichiers, plus petits donc, mais aussi plus nombreux !
 
C'est pourquoi que tu veux AUGMENTER la taille d'un fichier ? ? ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-07-2001 à 13:47:25    

y'a pas moyen de modifier la taille sans coller 2 fichiers ensemble ??
 
pour le zip,..... je connaissais deja, je voulais juste savoir s'il y avait moyen de le faire en batch

Reply

Marsh Posté le 10-07-2001 à 13:57:02    

Si tu connais PKZIP...
 
Au lieu de taper les commandes, tu les met dans un batch, c'est tout !
 
Sinon, pour augmenter la taille d'un fichier, là je vois pas !
Un fichier, çà contient un certain nombre d'uinité d'information élémentaire (Pour un fichier, l'unité est l'octet, pour simplifier). Augmenter la taille du fichier, çà veut dire ajouter de l'information.
Maintenant, si tu explique pourquoi tu veut faire çà, peut-être qu'on pourrait imaginer une solution...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-07-2001 à 17:06:41    

j'avais entendu dire qu'on pouvait le faire et je voulais savoir si c'etait reellement possible

Reply

Marsh Posté le 10-07-2001 à 17:22:46    

Pour QUOI faire ? ? ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-07-2001 à 22:53:30    

pour voir si c'est reellement possible

Reply

Marsh Posté le 10-07-2001 à 23:54:59    

Y'en a qu'ont un _probleme_ ;)

 

[edtdd]--Message édité par Mara's dad--[/edtdd]


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

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