modifier nom fichier txt

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Méta-MCI \(MVP\)
Le #1196362
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
cousinhub
Le #1197176
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


cousinhub
Le #1198441
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


Gilles LAURENT [MVP]
Le #1201023
"cousinhub" 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
cousinhub
Le #1202742
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" 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]
Le #1204075
"cousinhub" 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
Méta-MCI \(MVP\)
Le #1204074
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
Méta-MCI \(MVP\)
Le #1204073
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
cousinhub
Le #1204072
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



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

"cousinhub" 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"



Publicité
Poster une réponse
Anonyme