× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > 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 poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
199,99 €Ecran PC 27 pouces Dell S2721DS (QHD, IPS, 75 Hz) à 199,99 €
Valable jusqu'au 30 Novembre

Fnac fait une promotion sur l'écran PC 27 pouces Dell S2721DS qui passe à 199,99 € au lieu de plus de 250 € ailleurs. L'écran à cadre fin dispose d'une dalle IPS QHD (2560x1440 pixels) à 75 Hz. Il est compatible Freesync et dispose de 2 prises HDMI et 1 prise DP. Il dispose de haut-parleurs intégrés (2x3W) et son pied est réglable en hauteur.


> Voir l'offre
89,99 €Disque dur externe portable Seagate Backup 4 To USB 3.0 à 89,99 €
Valable jusqu'au 30 Novembre

Boulanger propose actuellement le disque dur externe portable 2.5 pouces Seagate 4 To Backup USB 3.0 à 89,99 €. On le trouve habituellement autour de 105 €. Grâce à la connectique USB 3.0 (compatible USB 2.0), ce disque dur vous offrira d'excellents débits pour vos transferts et vos sauvegardes. Notez que le disque à l'intérieur n'est pas soudé (vous pouvez le récupérer pour le mettre dans un portable) et qu'il est compatible PS4. 


> Voir l'offre
56,23 €SSD Samsung 860 EVO 500 Go à 56,23 € livré
Valable jusqu'au 02 Décembre

Amazon Allemagne fait une promotion sur le SSD Samsung 860 EVO 500 Go qui passe à 51,62 €. Comptez 4,61 € pour la livraison en France soit un total de 56,23 € livré alors qu'on le trouve ailleurs à partir de 70 €. Ce SSD offre des vitesses de 560 Mo/s en lecture et 520 Mo/s en écriture. Il est garanti 5 ans. Une bonne affaire.

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

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