> 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
57,70 €Alimentation Seasonic S12III 650W Plus Bronze à 57,70 € livrée
Valable jusqu'au 09 Mai

Amazon Allemagne propose actuellement la bonne alimentation Seasonic S12III 650W Plus Bronze à 49,81 €. Comptez 7,89 € pour la livraison en France soit un total de 57,70 € livrée. On la trouve habituellement autour de 67 €. L'alimentation est livrée gratuitement et est garantie 5 ans.

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douane. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre
Gratuit3 mois d'abonnement à Amazon Music Unlimited gratuits
Valable jusqu'au 30 Mai

Amazon vous permet d'essayer son service de streaming musical pendant 3 mois gratuitement. Avec Amazon Music Unlimited, accédez à plus de 50 millions de titres, sans publicité et en illimité sur tous vos appareils : smartphone, tablette, PC/Mac, Fire, Alexa. Vous avez même la possibilité de télécharger vos playlists pour des écoutes hors connexion. A la fin de ces 3 mois, vous pourrez basculer vers l'offre payante à 9,99 € / mois ou bien arrêter sans frais le service. A noter l'existence d'une offre famille à 14,99 € / mois qui permet jusqu'à 6 utilisateurs d'écouter leur musique à tout moment et sur leurs appareils préférés. Vous pouvez annuler l'abonnement à tout moment.


> Voir l'offre
659,99 €PC portable Asus VivoBook (FullHD IPS, Ryzen 5, 8 Go RAM, SSD 512G0, Vega 7) + sac à dos à 659,99 €
Valable jusqu'au 08 Mai

Cdiscount fait une très belle promotion sur le PC portable Asus 14 pouces R415UA-EB035T qui passe à 659,99 € au lieu de 750 €. Cet ultra portable léger (1,6 kg) possède un écran 14 pouces FullHD (1920x1080) IPS mat aux bordures affinées, un processeur AMD Ryzen 5 5500U, 8 Go de RAM, un processeur graphique AMD Radeon RX Vega 7 et un SSD NVMe de 512 Go. Le tout tourne sous Windows 10. Webcam, WiFi, USB 3.2, USB Type C, Ethernet Gigabit et Bluetooth sont de la partie. Notez que le clavier est rétroéclairé et que le pad peut se transformer en pavé numérique. Le tout tourne sous Windows 10. Un sac à dos est également fourni. Une bonne affaire.


> 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