Copie, déplacement, renommage de fichier, etc - Shell/Batch - Programmation
Marsh Posté le 12-11-2009 à 16:06:05
J'arrive difficilement à savoir comment procéder mais je pense que ceci pourrait fonctionner :
1. Supprimer tous les fichiers de Dossier xxx excepté les .jpg
2. Déplacer les fichiers Jpeg dans leur dossier parent
3. Supprimer les dossiers vides
Marsh Posté le 12-11-2009 à 17:50:40
avec find par exemple:
attention le -exec rm il pardonne pas.
pour supprimer les fichier Dng
Code :
|
pour déplacer les autres fichiers
Code :
|
pour supprimer les répertoires vides
Code :
|
Marsh Posté le 12-11-2009 à 19:11:05
Merci pataluc,
Par contre j'arrive pas à éxécuter le batch.
Je viens d'essayer de lancer le premier mais ça ne fonctionne pas.
J'ai mis ça dans mon batch :
Code :
|
Le nom de mon dossier est dossierxxx et il se trouve dans le même dossier que le batch en question.
Tous les dng sont toujours présents dans le dossier.
Qu'est-ce que j'ai oublié?
Marsh Posté le 13-11-2009 à 11:20:26
les commandes que j'ai donné sont des commandes unix, si tu es sur windows, récupère les sur http://unxutils.sourceforge.net/ et ensuite ca devrait marcher (windows a une commande find qui correspond au grep unix, mais pas au find unix)...
Marsh Posté le 13-11-2009 à 15:49:49
Excuses-moi pour mon ignorance. Mais je n'y arrive pas. J'ai récupérer unxutils. Donc à priori je doit pouvoir appliquer le script. Mais comment exactement.
Est-ce qu'il faut éxécuter un fichier dans unxutils (il y a beaucoup d'éxécutables)?
Est-ce que je dois mettre unxutils dans un dossier particulier?
Pour le script, je créé un xxx.bat?
Avec le code que tu m'as donné, il faut rajouter un "@echo off" ou autre chose?
Merci d'avance
Marsh Posté le 13-11-2009 à 16:33:36
ca risque d'être un peu compliqué si tu n'es pas trop à l'aise avec les scripts.
ou alors tu dézippe juste le find.exe et le sed.exe, tu le mets qqpart (par exemple dans d:\unxutils) et tu l'appelle avec
Code :
|
ca te génère les commandes dos pour supprimer les fichiers (tu les rediriges dans un .bat, et tu l'exécute, avec
Code :
|
ca va te générer la liste des fichiers
Marsh Posté le 15-11-2009 à 04:37:09
OK
J'ai passé beaucoup, beaucoup de temps à essayer de faire fonctionner tout ça.
J'ai réussi.
Voila le batch que j'avais réalisé :
Code :
|
Mais j'ai trouvé une commande dos qui me le fait ça plus simplement :
Code :
|
Ce qui donne maintenant :
Code :
|
Il ne me reste maintenant plus qu'à déplacer les fichiers jpg dans leur dossiers parents respectifs.
Mais je n'ai pas réussi. Voilà ce que j'ai tenté :
Code :
|
Sauf que les jpg arrivent tous dans le dossier parent d'ou je lance le batch. Je ne sais pas comment faire du coup
Le premier batch m'ecrit deplacerjpg.bat sous cette forme :
Code :
|
Je viens de trouver un bout de code qui pourrait fonctionner une fois adapté. Mais j'ai du mal avec la commande for.
Code :
|
Marsh Posté le 15-11-2009 à 16:54:32
alors pour les guillemets, tu peux remplacer ton
Code :
|
par
Code :
|
et ca devrait marcher...
Marsh Posté le 16-11-2009 à 00:57:42
j'avais pas vu ta réponse. Du coup j'ai édité le post précédent... Ca va mettre le souk!!
Marsh Posté le 16-11-2009 à 14:56:29
du coup t'en es d'ou? t'as réussi a faire ce que tu voulais?
Marsh Posté le 16-11-2009 à 16:37:51
J'ai presque réussi. Tout est dans mon avant dernier post.
Il ne me manque plus qu'à trouver comment déplacer un fichier jpg dans son dossier parent.
J'ai trouvé un code qui apparemment fonctionne pour quelqu'un mais je n'arrive pas à l'adapter à mon cas pour qu'il fonctionne.
Voila le code trouvé :
Code :
|
Marsh Posté le 16-11-2009 à 16:50:03
tu peux utiliser le modificateur "~dp" pour transformer %%a en son nom de répertoire, puis ajouter "..\" derrière pour spécifier le répertoire parent:
Code :
|
(dans le cas ou dir.txt contient les chemins complet des fichiers à déplacer)
Marsh Posté le 17-11-2009 à 02:53:20
Je bloque, même avec tes explications pataluc.
Ce que je veux faire c'est déplacer chaque fichiers jpg dans son répertoire parent, selon le niveau auquel il se trouve.
Dossier xxx Dossier xxx
/ \ / \
Dossier yy Dossier Jpeg Dossier yy fichiers Jpeg
/ | => |
Dossier Jpeg fichiers Jpeg fichiers Jpeg
|
fichiers Jpeg
Je n'arrive pas à créer la commande For pour me faire ça.
Pour le moment j'ai créé un fichier text qui s'appelle "dir.txt". Il me liste chaque fichiers présent dans le dossier où j'éxécute mon batch.
Voilà un bout de mon fichier txt
Code :
|
J'éxécute mon batch dans le dossier test
Ca doit pouvoir se réaliser avec "for" mais j'arrive pas à comprendre cette commande.
J'arrive à visualiser à peu près comment faire mais j'arrive pas à le concrétiser.
Avec une expression régulière avec "sed", sinon?
Marsh Posté le 17-11-2009 à 10:09:18
la commande que j'ai mis dans mon dernier post devrait marcher, mais j'ai l'impression qu'elle a du mal avec les espace dans les nom de dossier...
Marsh Posté le 17-11-2009 à 12:27:23
Effectivement, la commande fonctionne chez moi aussi mais comme j'ai des espaces de partout, ça fonctionne nul part!!
Est-ce que tu pense qu'on peut résoudre ce problème facilement?
Marsh Posté le 17-11-2009 à 13:53:40
c'est bien ce que je disait, il a un pb avec les espaces dans les noms de dossiers...
normalement en utilisant usebackq dans le for ca devrait résoudre le pb, mais j'arrive pas à le faire fonctionner... je regarde comment contourner avec un sed
Marsh Posté le 17-11-2009 à 14:13:12
avec ca:
Code :
|
ca devrait marcher, mais chez moi ca ne marchait pas (a cause du fait que c'est un portage de la commande sous windows à priori), et du coup j'ai du rajouter --text pour basculer en text mode:
Code :
|
derrière yaura plus qu'a balancer ca dans un bat...
Marsh Posté le 17-11-2009 à 18:18:44
J'ai une bonne et une mauvaise nouvelle.
La bonne c'est que la 2ème commande marche parfaitement bien et que le batch est à 2 doigts de fonctionner.
La mauvaise c'est qu'il y a 2 doigts!!
Je voulais ajouter d'autres commandes à la suite, mais elles ne sont pas lu.
Si je les éxécute dans un autre batch, ça fonctionne.
Je crois que c'est dû au mode texte "--text".
Comment en sort-on?
Merci.
Marsh Posté le 17-11-2009 à 19:46:25
pataluc a écrit : quel genre de commandes? |
Celles-ci précisément :
Code :
|
Mais même "pause" tout seul ça ne fonctionne pas
Marsh Posté le 17-11-2009 à 22:04:03
pataluc a écrit : t'as ajouté ca après les move? |
oui, entre la commande "dossierparent.bat" et la commande "exit"
Code :
|
D'ailleurs il y a un reste de mon test avec pause! Juste avant le move la commande pause fonctionne bien.
Marsh Posté le 17-11-2009 à 22:46:56
ah ok, c'est normal l'appel a dossierparent.bat interromps ton script... il faut le lancer avec call devant:
Code :
|
Marsh Posté le 17-11-2009 à 23:57:25
Parfait!
Bon j'ai un dernier bug dont je viens de m'apercevoir. Après je te laisse tranquille.
Jusqu'à présent, je testais mon batch sur un dossier appelé test. Tout fonctionnait.
Comme j'ai des espaces dans mes dossiers, j'ai fait un essai avec test 01. Et là surprise ça ne marche pas.
Forcément, il y a un espace. Donc je rajoute les guillemets comme ça : "test 01".
Sauf que la commande xcopy ne fonctionne plus maintenant puisque quand je rentre la variable "test 01" et qu'il la renomme, il l'écrit comme ça : "test 01" @2009
Mais je ne sais pas comment gérer ce problème comme d'habitude.
J'ai tenté d'inclure sed dans xcopy de cette manière mais sans succès :
Code :
|
Je te remet tout le code que j'ai au cas où.
Code :
|
Marsh Posté le 18-11-2009 à 14:03:05
xcopy a l'air d'avoir des soucis avec les espaces dans les noms. essaie avec les noms courts (8 caractères plus "~1" )... mais sans conviction.
Marsh Posté le 18-11-2009 à 14:58:42
Ca fonctionne s'il n'y a pas de chiffre. Mais rien de bien grave. Je renommerai à la main avant de lancer le script.
!!! MISSION ACCOMPLIE !!!
Le batch fonctionne très bien.
Un grand merci pataluc pour ton suivi sans faille.
Ca va me permettre de gagner pas mal de temps pour gérer mes fichiers. Ce qui à vrai dire n'est pas le plus sympas à faire.
Merci encore. J'pensais que tu perdrais patience
Je remets le batch complet pour d'autres qui voudraient faire le même genre de choses.
Code :
|
Marsh Posté le 30-11-2009 à 20:08:23
slt tlm,
je m'incruste un peu car je vois que ca parle de *.bat
Je voudrais copier le fichier a.txt qui ai dans c:\ dans c:\windows.
j'ai essayé
echo on
copy "a.txt" "C:\WINDOWS\"
echo off
mais ca marche pas, il me marque "le fichier spécifié est introuvable"
quelqu'un peut le filer un coup de pouce?
merci
Marsh Posté le 01-12-2009 à 00:19:49
Essaie avec le chemin complet : copy "C:\a.txt" "C:\WINDOWS\"
Marsh Posté le 12-11-2009 à 15:02:16
Bonjour programmeurs,
Je souhaiterai automatiser des tâches récurentes pour gagner du temps.
Si seulement c'était simple l'informatique!!!
Je ne connait rien en programmation.
Il me semble que le batch est le plus adapté pour ce genre de manip.
J'ai cela pour le moment :
Dossier xxx
/ \
Dossier yy Dossier zz
/ \ / \
dossier dossier dossier dossier
Jpeg Dng Jpeg Dng
| | | |
fichier fichier fichier fichier
jpg Dng jpg Dng
Je voudrais arriver à ça :
Dossier xxx
/ \
Dossier yy Dossier zz
| |
fichier fichier
jpg jpg
Après visionnage, je pense que s'est compréhensible. Mais dites moi si vous n'y arrivez pas.
J'ai jeter un oeil de mon coté sur les commandes batch pour essayer de faire quelque chose mais il n'y a aucune explication sur la syntaxe précise. Il y a juste les commandes.
Merci beaucoup si quelqu'un peu m'aider.