|
 Posté le 06/10/2020 @ 20:10 |
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.
|
|
|
|
|
|
Posté le 06/10/2020 à 21:01 |
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 ? |
|
Posté le 06/10/2020 à 21:36 |
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 ?
|
|
Posté le 06/10/2020 à 23:15 |
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 
|
|
Posté le 06/10/2020 à 23:17 |
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 |
|
Posté le 09/10/2020 à 12:32 |
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.  |
|
Posté le 09/10/2020 à 15:55 |
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 |
|
Posté le 09/10/2020 à 17:17 |
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.
|
|
Posté le 09/10/2020 à 17:57 |
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. |
|
|
|
|
|
Posté le 09/10/2020 à 18:09 |
Maître astucien | 
Et le nouveau nom il vient d'où ?
Par exemple Année 2020.txt devient qioi ?
|
|
Posté le 09/10/2020 à 20:32 |
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 |
|
Posté le 09/10/2020 à 21:11 |
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 |
|
Posté le 09/10/2020 à 22:00 |
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. |
|
Posté le 09/10/2020 à 22:03 |
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 |
|
Posté le 09/10/2020 à 22:17 |
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. 
|
|
Posté le 09/10/2020 à 22:20 |
Maître astucien | 
comme ça :

|
|
Posté le 09/10/2020 à 22:24 |
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  |
|
|
|
|
|
Posté le 09/10/2020 à 22:27 |
Maître astucien | 
AVANT de lancer le script tu tapes à la suite le nom du dossier et APRÈS tu presses Entrée.
|
|
Posté le 09/10/2020 à 22:40 |
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.  |
|
Posté le 09/10/2020 à 22:42 |
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 (
|
|
Posté le 09/10/2020 à 22:50 |
Maître astucien | |
|
Posté le 09/10/2020 à 22:52 |
Petite astucienne
| Bonsoir Constance 
J'ai modifié comme tu l'as suggéré mais le problème persiste. |
|
Posté le 09/10/2020 à 22:56 |
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.  |
|
Posté le 09/10/2020 à 22:58 |
Maître astucien | |
|
Posté le 09/10/2020 à 23:15 |
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 |
|
Posté le 09/10/2020 à 23:24 |
Maître astucien | 
Tu peux mettre une copie du script A ?
|
|
|
|
|
|