IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Renommer des fichiers en batch


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 16
    Points
    16
    Par défaut Renommer des fichiers en batch
    Bonjour,

    Je code en batch un programme me permettant de renommer des fichiers dans un répertoire. Le répertoire est composé d'un ensemble de fichiers .html. Je souhaite lire un à un les fichiers, savoir s'il est vide, et si oui, le renommer avec l'extension "ab_empty.html" au lieu de "ab.html".
    Mon code est le suivant et je ne comprends pas pourquoi ça ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    for /r "monrep\" %%i in (*.*) do (
    
    	if "%%i"'==' echo usage is: %0 FILENAME.EXT && goto :eof
    	if not exist %%i echo %%i was not found && goto :eof
    	if %~z1 EQU 0 goto :0
    	goto :eof
    	:: The file is not zero length in that case
    
    
    	::
    	:0
    	echo %%i is size zero
            ren "%%i" "%%~ni_empty.html"
    
    )
    et ça me retourne le message suivant "0 était innatendu" quand j'exécute le .bat en ligne de commande.

    Une idée d'où ça pourrait venir?

    Merci d'avance.

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Essaie plutôt ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @echo off
    if "%1"=="" ((echo Usage is: %0 ^<Folder^>) & (goto :eof))
    echo Will process folder: %1
    
    for /r %%i in (%1\*.html) do (
    	if %%~zi==0 (
    		echo File "%%~nxi" have a null size, renaming it...
    		move "%%i" "%%~dpni_empty%%~xi"
    	) else (
    		echo %1\%%~nxi : size %%~zi bytes, skipped...
    	)
    )
    Le programme prends en argument 1 le nom du répertoire à scanner, absolu ou relatif au choix.

    Désolé d'être brutal, mais ton batch était un peu trop crade... Te dire pourquoi il foirait, je ne sais pas trop, c'était trop mal écrit, j'ai préféré casser et refaire.

    En vrac :
    - Même si "ça marche", j'évite les étiquettes numériques.
    - Il vaut mieux sur-parenthéser que sous-parenthéser dans les expressions composées.
    - Ne pas oublier les "^" d'échappement, aussi, quand c'est nécessaire...
    - Côté algo, j'avoue ne pas avoir compris l'intérêt de ton paramètre en ligne de commande.
    - Ton test de paramètre %1 était incorrect (le test ne pouvait jamais être vrai).
    - Ta syntaxe de "for" était incorrecte.
    - Inutile de tester l'existence d'un fichier au sein d'une boucle for, sauf si tu es en répertoire partagé et que des gens peuvent flinguer tes fichiers pendant que tu exécutes ton batch.
    - Tu ne testais pas la taille nulle des fichiers scannés par "for", mais celle du paramètre original. De plus, "%%#zi" renvoie une chaine, tu peux la tester directement avec "==".


    Autre problème, que mon programme ci-dessus possède également : le rename est récursif, c'est à dire que si tu effectues deux fois le traitement sur ton répertoire, tu auras des fichiers du genre "truc_empty_empty.html"... Si tu veux vraiment les mettre de côté, changes-en l'extension, ou ajoutes un filtre supplémentaire pour supprimer les fichiers contenant "_empty".

    J'espère que ça t'aura aidé.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    si vous permettez je vais rajouter ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /r %%i in (%1\*.html) do echo %%i
    --> matcher tous les fichiers HTML du répertoire courant ainsi que tous ses sous-répertoires, et qui contiennent
    au moins le signe "\" (qui est un caractère reservé donc interdit dans le nommage des fichiers, les autres caractères interdits sont : "<:*?>|/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /r "%1\" %%i in (*.html) do echo %%i
    --> matcher tous les fichiers HTML du répertoire "%1\" ainsi que tous ses sous-répertoires

    c'est tout

    * Bonne continuation *

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par I'm_HERE Voir le message
    --> matcher tous les fichiers HTML du répertoire courant ainsi que tous ses sous-répertoires, et qui contiennent
    au moins le signe "\" (qui est un caractère reservé donc interdit dans le nommage des fichiers, les autres caractères interdits sont : "<:*?>|/
    Narf... J'ai fait tous mes tests avec "." en paramètre, j'aurais pas dû, j'ai zappé ce coup-là... Fatigue...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. Renommer des fichiers en Batch
    Par jag281 dans le forum Discussions diverses
    Réponses: 2
    Dernier message: 12/07/2009, 09h49
  2. [Batch] [batch] Renommer des fichiers
    Par altus643805 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 22/12/2007, 09h57
  3. Renommer des fichiers
    Par Cathy dans le forum Linux
    Réponses: 3
    Dernier message: 12/09/2005, 17h24
  4. [LG]programme qui renomme des fichiers
    Par Ne0taku dans le forum Langage
    Réponses: 9
    Dernier message: 16/02/2005, 21h18
  5. [] [Réseau] Renommer des fichiers dans un site FTP
    Par JerBi dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/08/2003, 00h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo