> 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
133,18 €Imprimante 3D Creality Ender 3 à 133,18 € avec le code BGbec4d6 (stock Europe)
Valable jusqu'au 18 Avril

Banggood fait une belle promotion sur l'imprimante 3D Creality Ender 3 à 133,18 € livrée en France (avec l'assurance) avec le code BGbec4d6. On la trouve ailleurs autour de 180 €. L'imprimante est expédiée depuis un stock Europe (en République Tchèque). Elle sera donc rapide et vous êtes sûr de ne pas avoir de douane. 

La Creality Ender 3 est l'une des machines les plus populaires actuellement sur le marché. Et pour cause. Elle dispose d'un volume d’impression de 220 x 220 x 250 mm, est équipée d'un plateau chauffant inspiré du BuildTak, d'un écran LCD et offre des fonctionnalités pratiques comme la reprise de l'impression après une coupure de courant ou le conduit pour le filament étroit. L'imprimante 3D est facile à assembler et le calibrage est aisé grâce aux gros boutons. 


> Voir l'offre
5,49 €Clé USB 3.0 Kingston DataTraveler 100 G3 32 Go à 5,49 €
Valable jusqu'au 18 Avril

Amazon vous propose actuellement la clé USB 3.0 Kingston DataTraveler 100 G3 32 Go à 5,49 €. Sa fermeture coulissante vous permettra de protéger le connecteur USB 3.0 (compatible USB 2.0). Notez que le lot de 3 clés est aussi en promo à 14,39 €.


> Voir l'offre
103,54 €Tablette 8 pouces Galaxy Tab A 2019 (4 coeurs, 32 Go, Wifi, HD, RAM 2 Go) à 103,54 € livrée
Valable jusqu'au 18 Avril

Amazon Espagne fait une promotion sur la tablette 8 pouces Samsung Galaxy Tab A 2019 qui passe à 98,18 € (avec la TVA ajustée). Comptez 5,36 € pour la livraison en France soit un total de 103,54 € livrée. On la trouve ailleurs à plus de 150 €. Cette tablette possède un écran 8 pouces HD (1280x800 pixels), un processeur quad-core 2 GHz, 2 Go de RAM, un espace de stockage de 32 Go extensible par MicroSD, le WiFi, le bluetooth et tourne sous Android 10.

La tablette pourra être mise en français dès le premier démarrage et vous bénéficiez d'une garantie européenne de 2 ans. Vous pouvez utiliser votre compte Amazon France sur Amazon Espagne et il n'y a pas de douane.


> 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