Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

modifier nom fichier txt

15 réponses
Avatar
cousinhub
Bonjour,
Tous les jours, 3 fois par jour, je convertis un certain nombre de
messages sous format .txt.
Ces fichiers sont stockés dans un répertoire portant la date du jour, et
via l'extraction porte un nom quelconque, déterminé par le système.
Dans chaque fichier existe une ligne commençant par Obj/, cette ligne
pouvant se trouver n'importe où (en général dans les dix premières lignes)
Ce que je cherche à faire, c'est de mettre le script dans le répertoire
actif, passer tous les fichiers *.txt en revue, et renommer le fichier
avec le contenu situé après Obj/
Merci pour vos réponses

10 réponses

1 2
Avatar
Méta-MCI \(MVP\)
Salut !


Un petit batch vite fait :

@echo off
FOR /F "tokens=*" %%i IN ('dir *.txt /B') DO call :SUB %%i
goto :EOF

:SUB
FOR /F "tokens=1*" %%i IN ('type "%*" ^| find "Obj/"') DO ren "%*"
"%%j.txt"
goto :EOF

qui devrait faire l'affaire.


@-salutations
--
Michel Claveau
Avatar
cousinhub
Merci, j'essaie la semaine prochaine, et te tiens au courant
(congé cette semaine...)

Salut !


Un petit batch vite fait :

@echo off
FOR /F "tokens=*" %%i IN ('dir *.txt /B') DO call :SUB %%i
goto :EOF

:SUB
FOR /F "tokens=1*" %%i IN ('type "%*" ^| find "Obj/"') DO ren "%*"
"%%j.txt"
goto :EOF

qui devrait faire l'affaire.


@-salutations


Avatar
cousinhub
Re-bonsoir
j'ai quand même fait quelques essais
cela fonctionne parfaitement s'il y a un espace après le / de Obj/
exemple : Obj/ nomàchanger
s'il n'y a pas d'espace, le batch modifie le premier fichier, le renomme
bien, puis le 2ème le renomme .txt et ensuite arrête, car pour lui le
fichier existe déjà (vu par commande cmd)
Quelle modification faudrait-il faire pour éviter ce problème?
Merci

Salut !


Un petit batch vite fait :

@echo off
FOR /F "tokens=*" %%i IN ('dir *.txt /B') DO call :SUB %%i
goto :EOF

:SUB
FOR /F "tokens=1*" %%i IN ('type "%*" ^| find "Obj/"') DO ren "%*"
"%%j.txt"
goto :EOF

qui devrait faire l'affaire.


@-salutations


Avatar
Gilles LAURENT [MVP]
"cousinhub" a écrit dans le message de
news:
| Bonjour,

Bonsoir,

| Dans chaque fichier existe une ligne commençant par Obj/, cette ligne
| pouvant se trouver n'importe où (en général dans les dix premières
| lignes) Ce que je cherche à faire, c'est de mettre le script dans le
| répertoire actif, passer tous les fichiers *.txt en revue, et
| renommer le fichier avec le contenu situé après Obj/

Une version alternative, toujours en batch :

--- Coupez ici : RenFiles.cmd ---
@echo off
for /f "delims=/: tokens=1,3" %%i in ('findstr "^Obj/" *.txt') do (
ren "%%i" "%%j"
)
--- Coupez ici : RenFiles.cmd ---

Et une version en VBScript :

--- Coupez ici : RenFiles.vbs ---
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oRe=New RegExp: oRe.IgnoreCase=True: oRe.MultiLine=True
For Each oFile In oFs.GetFolder(".").Files
oRe.Pattern=".txt$"
If oRe.Test(oFile.Name) Then
sLines=oFs.OpenTextFile(oFile.Name).ReadAll()
oRe.Pattern="^obj/(.*)r$"
If oRe.Test(sLines) Then
oFile.Move oRe.Execute(sLines)(0).SubMatches(0)
End If
End If
Next
--- Coupez ici : RenFiles.vbs ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
cousinhub
Bonjour, et merci pour ces deux réponses
un petit souci (rectifié pour le premièr, mais ??? pour le deuxième)
les 2 codes changent bien le nom, mais oublient l'extension
pour le premier, j'ai rajouté le . text : "%%j.txt"
pour le deuxième????
PS, je n'y connais rien en vbs (pas plus qu'en batch non plus,
d'ailleurs), mais en vba, je me débrouille un peu
Merci encore

"cousinhub" a écrit dans le message de
news:
| Bonjour,

Bonsoir,

| Dans chaque fichier existe une ligne commençant par Obj/, cette ligne
| pouvant se trouver n'importe où (en général dans les dix premières
| lignes) Ce que je cherche à faire, c'est de mettre le script dans le
| répertoire actif, passer tous les fichiers *.txt en revue, et
| renommer le fichier avec le contenu situé après Obj/

Une version alternative, toujours en batch :

--- Coupez ici : RenFiles.cmd ---
@echo off
for /f "delims=/: tokens=1,3" %%i in ('findstr "^Obj/" *.txt') do (
ren "%%i" "%%j"
)
--- Coupez ici : RenFiles.cmd ---

Et une version en VBScript :

--- Coupez ici : RenFiles.vbs ---
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oRe=New RegExp: oRe.IgnoreCase=True: oRe.MultiLine=True
For Each oFile In oFs.GetFolder(".").Files
oRe.Pattern=".txt$"
If oRe.Test(oFile.Name) Then
sLines=oFs.OpenTextFile(oFile.Name).ReadAll()
oRe.Pattern="^obj/(.*)r$"
If oRe.Test(sLines) Then
oFile.Move oRe.Execute(sLines)(0).SubMatches(0)
End If
End If
Next
--- Coupez ici : RenFiles.vbs ---



Avatar
Gilles LAURENT [MVP]
"cousinhub" a écrit dans le message de
news:
| Bonjour

Bonjour,

| les 2 codes changent bien le nom, mais oublient l'extension

C'est dans le but de respecter le cachier des charges :-)
Les fichiers sont renommés avec le nom situé derrière la balise /Obj. Si
ce nom ne comporte pas d'extension alors le fichier est renommé sans
extension. Pour adapter le script VBScript il suffit de spécifier
l'extension ".txt" lors de l'appel à la méthode Move de l'objet File :

oFile.Move oRe.Execute(sLines)(0).SubMatches(0) & ".txt"

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
Méta-MCI \(MVP\)
Bonjour !


Il suffit d'ajouter le "/" comme délimiteur (dans l'avant-dernière
ligne) :

@echo off
FOR /F "tokens=*" %%i IN ('dir *.txt /B') DO call :SUB %%i
goto :EOF

:SUB
FOR /F "tokens=1* delims=/ " %%i IN ('type "%*" ^| find "Obj/"') DO
echo ren "%*" "%%j.txt"
goto :EOF


@+
--
Michel Claveau
Avatar
Méta-MCI \(MVP\)
Bonjour !

Petite particularité (pour le batch) : s'il y a un (ou plusieurs)
espace(s), juste après "Obj/" il sont rajoutés au début du nouveau nom.
Ce n'est pas forcément faux ; c'est juste pour le préciser.

@+
--
Michel Claveau
Avatar
cousinhub
Bonjour
et merci
pour le moment, je n'ai pas de fichier exemple à traiter, mais dès que
j'aurai fait quelques essais, je n'oublierai pas de vous donner le résultat.
Merci encore

Bonjour !


Il suffit d'ajouter le "/" comme délimiteur (dans l'avant-dernière ligne) :

@echo off
FOR /F "tokens=*" %%i IN ('dir *.txt /B') DO call :SUB %%i
goto :EOF

:SUB
FOR /F "tokens=1* delims=/ " %%i IN ('type "%*" ^| find "Obj/"') DO
echo ren "%*" "%%j.txt"
goto :EOF


@+
--
Michel Claveau



Avatar
cousinhub
Bonjour
effectivement, à question précise, réponse précise......(lol)
Merci beaucoup
je reviens après essais (dans une semaine)

"cousinhub" a écrit dans le message de
news:
| Bonjour

Bonjour,

| les 2 codes changent bien le nom, mais oublient l'extension

C'est dans le but de respecter le cachier des charges :-)
Les fichiers sont renommés avec le nom situé derrière la balise /Obj. Si
ce nom ne comporte pas d'extension alors le fichier est renommé sans
extension. Pour adapter le script VBScript il suffit de spécifier
l'extension ".txt" lors de l'appel à la méthode Move de l'objet File :

oFile.Move oRe.Execute(sLines)(0).SubMatches(0) & ".txt"



1 2