> Tous les forums > Forum Autres langages
 Traiter n'importe quel nom de fichier.txt
Ajouter un message à la discussion
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]
tease
  Posté le 06/10/2020 @ 20:10 
Aller en bas de la page 
Petite astucienne

Bonjour

Voici un script qui renomme des fichiers à partir de names.txt qui contient une série de fichiers de différentes extensions

Mais pour cela, il faut que je renomme manuellement répertoire.txt (le nom change en fonction du répertoire) en names.txt

Je voudrais que ce script traite n'importe quel nom du fichier.txt au lieu de names.txt

Est-ce possible ?

Voici le script en question:

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

CHCP 1252 >nul

rem Load the list of new filenames

set i=0

for /f "delims=" %%a in (names.txt) do (

set /A i+=1

set "newname[!i!]=%%a"

)

rem Do the rename:

set i=0

for /f "delims=" %%a in ('dir /b /o:n *.*') do (

echo;"%%~a" | findstr ".bat" >nul && (

rem ".bat" File

) || (

rem Valid File

set /A i+=1

for %%i in (!i!) do ren "%%~a" "!newname[%%i]!"

)

)

Merci de bien vouloir m'aider.

Publicité
Constance
 Posté le 06/10/2020 à 21:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut .o/

C'est sûrement possible oui, mais comment veux-tu que le script identifie le fichier contenant la liste des noms alors ? Il prend le premier trouvé ? On lui passe en paramètre ?

Daneel Olivaw
 Posté le 06/10/2020 à 21:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

En changeant :

for /f "delims=" %%a in (names.txt) do (

en :

for /f "delims=" %%a in (%1) do (

et en passant le non du fichier en paramètre au lancement. Ça ne marche pas ?

tease
 Posté le 06/10/2020 à 23:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonsoir

Merci à Constance et à Daneel Olivaw d'avoir répondu à mon message.

@ Daneel Olivaw

J'ai changé for /f "delims=" %%a in (%1) do (

mais ça ne marche pas car je n'ai pas compris en passant le non (ou le nom) du fichier en paramètre au lancement

Daneel Olivaw
 Posté le 06/10/2020 à 23:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Quand tu lance le fichier .bat ou .cmd, tu ajoutes comme paratmètre le nom du fichier.

Exemple :

renommer.bat mondossier.txt

%1 sera remplacé par mondossier.txt



Modifié par Daneel Olivaw le 06/10/2020 23:18
tease
 Posté le 09/10/2020 à 12:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonjour Daneel Olivaw

J'ai remplacé :

for /f "delims=" %%a in (names.txt) do (

par :

for /f "delims=" %%a in (%1) do (

J'ai lancé le batch mais rien ne s'affiche pour ajouter comme paramètre le nom du fichier.

La fenêtre du batch disparaît en une fraction de seconde.

Peux-tu modifier le script et faire un essai ?

Merci infiniment.

tease
 Posté le 09/10/2020 à 15:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonjour!

J'ai modifié le début du script pour pouvoir écrire le nom du fichier.txt qui contient une liste de fichiers à renommer.

Avant:

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

CHCP 1252 >nul

rem Load the list of new filenames

set i=0

for /f "delims=" %%a in (names.txt) do (

set /A i+=1

set "newname[!i!]=%%a"

)

rem Do the rename:

set i=0

for /f "delims=" %%a in ('dir /b /o:n *.*') do (

echo;"%%~a" | findstr ".bat" >nul && (

rem ".bat" File

) || (

rem Valid File

set /A i+=1

for %%i in (!i!) do ren "%%~a" "!newname[%%i]!"

)

)

Après:

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

CHCP 1252 >nul

rem Load the list of new filenames

set /p name=^>

set i=0

for /f "delims=" %%a in (%name%.txt) do (

set /A i+=1

set "newname[!i!]=%%a"

)

rem Do the rename:

set i=0

for /f "delims=" %%a in ('dir /b /o:n *.*') do (

echo;"%%~a" | findstr ".bat" >nul && (

rem ".bat" File

) || (

rem Valid File

set /A i+=1

for %%i in (!i!) do ren "%%~a" "!newname[%%i]!"

)

)

Problème:

Si le fichier txt est composé d'espaces, par exemple Dossier documents, le script ne fonctionne pas.

Je sais qu'il faut ajouter des " " pour traiter des noms avec espace(s).

Où ajouter les " " dans: for /f "delims=" %%a in (%name%.txt) do (

Merci de bien vouloir m'aider.



Modifié par tease le 09/10/2020 16:47
Daneel Olivaw
 Posté le 09/10/2020 à 17:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Il n'y a pas d'autre modification à faire autre que celle-ci :

for /f "delims=" %%a in (%1) do (

Au momoment d'exécuter, tu papes :

xxx.bat "Dossier Documents"

Peux-tu modifier le script et faire un essai ?

Pour ça je dois savoir quel est le contenu du fichier "Dossier Documents" ou du moins quelle est sat atructure.

tease
 Posté le 09/10/2020 à 17:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonjour Daneel Olivaw!

Dossier Documents.txt contient une liste de fichiers, par exemple:

Année 2020.txt

Prévisions.pdf

Voyage.docx

Documentaire.mp4

Zoo.jpg

...

Cela sert à renommer d'autres fichiers.

Merci.

Publicité
Daneel Olivaw
 Posté le 09/10/2020 à 18:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Et le nouveau nom il vient d'où ?

Par exemple Année 2020.txt devient qioi ?

tease
 Posté le 09/10/2020 à 20:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

J'ai deux répertoires: l'un s'appelle Dossier Documents, l'autre Nouveau

Dans Dossier Documents, j'ai un script A et des fichiers de différentes extensions comme Année 2020.txt, Prévisions.pdf, Voyage.docx, Documentaire.mp4, Zoo.jpg, etc...

Dans Nouveau, j'ai le script B (que j'ai affiché en haut) et les mêmes fichiers mais ils ont d'autres noms.

Le script A génère la liste des fichiers contenus dans le répertoire Dossier Documents et donne au fichier.txt le nom Dossier Documents.txt

Le script B renomme les fichiers contenus dans le répertoire Nouveau

Je copie le fichier.txt Dossier Documents.txt qui se trouve dans le répertoire Dossier Documents et je le colle dans le répertoire Nouveau.

Lorsque je lance le script B, je tape dossier documents et lorsque j'appuie sur la touche ENTRÉE, il renomme les fichiers suivant le contenu de Dossier Documents.txt.

Le problème c'est que le script ne peut pas renommer les fichiers parce qu'il ne reconnaît pas les noms avec espace(s) comme Dossier Documents.txt.

Mais si le fichier.txt qui contient la liste des fichiers à renommer s'appelle simplement Documents.txt, le script fonctionne.

Voilà ce que je veux faire avec le script B qui fonctionne très bien si le fichier s'appelle Documents.txt.

Merci de bien vouloir m'aider.



Modifié par tease le 09/10/2020 20:35
Daneel Olivaw
 Posté le 09/10/2020 à 21:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Je t'avais suggéré de modifier comme ça :

for /f "delims=" %%a in (%1) do (

sans ajouter .txt.

et de taper la commande comme ceci :

script.bat "Dossiers Documents.txt"

en ajoutant .txt ainsi que les guillemets.



Modifié par Daneel Olivaw le 09/10/2020 21:27
tease
 Posté le 09/10/2020 à 22:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Voici ce que j'ai fait

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

CHCP 1252 >nul

rem Load the list of new filenames

set i=0

for /f "delims=" %%a in (%1) do (

set /A i+=1

set "newname[!i!]=%%a"

)

rem Do the rename:

set i=0

for /f "delims=" %%a in ('dir /b /o:n *.*') do (

echo;"%%~a" | findstr ".bat" >nul && (

rem ".bat" File

) || (

rem Valid File

set /A i+=1

for %%i in (!i!) do ren "%%~a" "!newname[%%i]!"

)

)

Où dois-je taper la commande, dans le script ou au lancement du batch ?

script.bat "Dossiers Documents.txt"

Lorsque je lance le batch la fenêtre disparaît aussitôt et rien ne se passe.

Daneel Olivaw
 Posté le 09/10/2020 à 22:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien
tease a écrit :

Où dois-je taper la commande, dans le script ou au lancement du batch ?

script.bat "Dossiers Documents.txt"

Lorsque je lance le batch la fenêtre disparaît aussitôt et rien ne se passe.

À la suite du batch sur la même ligne :

xxxx.bat "Dossiers Documents.txt"

avec un espace après .bat.

Si ton fichier batch s'appelle renommer.bat, alors tu tapes :

renommer "Dossiers Documents.txt"



Modifié par Daneel Olivaw le 09/10/2020 22:04
tease
 Posté le 09/10/2020 à 22:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

À la suite du batch sur la même ligne

Sur quelle ligne ?

Avant quelle ligne ?

Après quelle ligne ?

À la fin du script ?

Merci de m'indiquer l'endroit exact par rapport au script.

Daneel Olivaw
 Posté le 09/10/2020 à 22:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

comme ça :

tease
 Posté le 09/10/2020 à 22:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Je crois qu'il y a un problème. Lorsque je lance le script, la fenêtre disparaît aussitôt et je ne peux rien taper.

Peux-tu vérifier si le script ne contient aucune erreur ?

Merci

Publicité
Daneel Olivaw
 Posté le 09/10/2020 à 22:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

AVANT de lancer le script tu tapes à la suite le nom du dossier et APRÈS tu presses Entrée.

tease
 Posté le 09/10/2020 à 22:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Peux-tu publier le script complet car chez moi ça ne fonctionne pas.

J'ai suivi à la lettre tes recommandations.

Voici le script que j'utilise. Mon fichier se nomme Rename.bat mais la fenêtre disparaît dès que le lance le batch.

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

CHCP 1252 >nul

rem Load the list of new filenames

set i=0

for /f "delims=" %%a in (%1) do (

set /A i+=1

set "newname[!i!]=%%a"

)

rem Do the rename:

set i=0

for /f "delims=" %%a in ('dir /b /o:n *.*') do (

echo;"%%~a" | findstr ".bat" >nul && (

rem ".bat" File

) || (

rem Valid File

set /A i+=1

for %%i in (!i!) do ren "%%~a" "!newname[%%i]!"

)

)

Merci.

Constance
 Posté le 09/10/2020 à 22:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut .o/

La commande "for" fonctionne différemment selon que le paramètre entre parenthèses est lui-même entre guillemets ou non — cf. for /?

Du coup, si on veut qu'elle utilise comme une liste le fichier qu'on a passé au script comme premier paramètre, et si ce nom est encadré par des guillemets, alors ça pose problème quand on utilise:

for /f "delims=" %%a in (%1) do (

Pour éviter ça, on peut mettre à la place:

for /f "delims=" %%a in ('type %1') do (

Daneel Olivaw
 Posté le 09/10/2020 à 22:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Regarde cette vidéo :

https://www.cjoint.com/c/JJjuXSMOano

tease
 Posté le 09/10/2020 à 22:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonsoir Constance

J'ai modifié comme tu l'as suggéré mais le problème persiste.

tease
 Posté le 09/10/2020 à 22:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Si la fenêtre du batch reste affichée, je peux taper la commande. Mais ce n'est pas le cas chez moi.

Daneel Olivaw
 Posté le 09/10/2020 à 22:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

tease
 Posté le 09/10/2020 à 23:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

J'ai lancé Rename.bat en tant qu'administrateur mais le problème persiste. Tant pis.

Je tiens à vous remercier infiniment pour tout ce que vous avez fait, publié pour m'aider à résoudre ce problème.

J'espère vous retrouver en bonne santé une prochaine fois. Bye!



Modifié par tease le 09/10/2020 23:26
Daneel Olivaw
 Posté le 09/10/2020 à 23:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Tu peux mettre une copie du script A ?

Publicité
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
37,49 €Pack clavier + souris sans-fil Logitech MK470 à 37,49 €
Valable jusqu'au 20 Mai

Amazon fait une promotion sur le pack clavier + souris sans-fil Logitech MK470 à 37,49 € au lieu de 50 €. Compact et avant-gardiste, cet ensemble Logitech MK470 est parfait pour travailler efficacement. L'ensemble se distingue notamment par sa simplicité et à leur profil ultra-mince.

Le clavier compact comprend notamment un pavé numérique et 12 raccourcis de fonction, vous offrant ainsi toutes les touches dont vous avez besoin. De plus, les touches à microcharnières extra-plates offrent une expérience de frappe fluide et familière. Quant à la souris, elle est dotée de trois boutons et d'une molette de défilement extrêmement silencieuse. Et avec sa forme en galet et la douceur de la souris ambidextre, elle offre un grand confort d'utilisation pour les droitiers comme les gauchers. 


> Voir l'offre
121,46 €Onduleur Eaton Ellipse PRO 650 USB à 121,46 €
Valable jusqu'au 18 Mai

Amazon fait une promotion sur l'onduleur Eaton Ellipse 650 PRO USB qui passe à 121,46 € au lieu de 150 €. 

L'onduleur line interactive Eaton Ellipse PRO 650VA (400W) FR est destiné à la protection des stations de travail. Grâce à son écran LCD, cet onduleur Eaton permet de visualiser les états et les mesures en temps réel. De plus, une prise de sortie EcoControl permet d’économiser jusqu’à 15% d’énergie. L'onduleur Eaton Ellipse PRO dispose également d’un dispositif haute performance contre les surtensions, conforme avec la norme parafoudre IEC 61643-1. Le modèle Eaton Ellipse PRO 650 FR dispose en tout de 4 prises électriques françaises. 

Port USB (avec câble USB fourni) et logiciel de gestion d’énergie Eaton UPS Companion qui permet un arrêt en toute sécurité, la mesure de la consommation et le paramétrage de l’onduleur. Batterie garantie 3 ans et facilement remplaçable.


> Voir l'offre
89,99 €Disque dur externe portable Seagate Expansion 4 To USB 3.0 à 89,99 € avec le code AFFAIRE20
Valable jusqu'au 18 Mai

Cdiscount fait une promotion sur le disque dur externe portable Seagate Expansion d'une capacité de 4 To qui passe à 89,99 € avec le code promo AFFAIRE20 alors qu'on le trouve ailleurs à partir de 120 €. Ce disque dur externe portable au format 2,5 pouces dispose d'une interface USB 3.0 compatible USB 2.0. Une excellente affaire pour ce disque dur qui offre des débits de 115 Mo/s. Il n'est pas soudé et est donc démontable si vous souhaitez le réutiliser ailleurs (console, NAS, PC).


> Voir l'offre

Sujets relatifs
Quel langage pour extraire un fichier de zip 3e niveau
Macro_Word : garder le nom de fichier actuel
creation fichier CSV a partir de txt
Erreur d'Ouverture de Fichier Illustrator = opérateur Fautif: "Bg"
Convertir un fichier image de 2002 avec extension ".GOOD"
ni rundll.exe ni Extension de fichier: .exe
prog C faire choisir le nom du fichier à créer
Utilisation de fichier .CSV en C++
Fichier SDF: impossible de réccuperer mes données
c++nom fichier substituable
Plus de sujets relatifs à Traiter n''importe quel nom de fichier.txt
 > Tous les forums > Forum Autres langages