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

5 réponses

1 2
Avatar
cousinhub
Re-,
fait quand même quelques essais, mais.....
Existe-t-il un code comme dans VBA, On Error Resume Next
car, il se peut que le fichier ait été déjà renommé (le matin)
et après ajout de nouveaux fichiers, relancer le script, mais en
ignorant les fichiers préalablement renommés
Merci

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



Avatar
Gilles LAURENT [MVP]
Existe-t-il un code comme dans VBA, On Error Resume Next
car, il se peut que le fichier ait été déjà renommé (le matin)
et après ajout de nouveaux fichiers, relancer le script, mais en
ignorant les fichiers préalablement renommés


Tout à fait, cette déclaration existe également en VBScript. Toutefois je
pense que la meilleure solution consiste à tester l'existance du fichier
avant de procéder au renommage. Le bout de code devient donc :

If oRe.Test(sLines) Then
sNewName=oRe.Execute(sLines)(0).SubMatches(0) & ".txt"
If Not oFs.FileExists(sNewName) Then
oFile.Move sNewName
End If
End If

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr

Avatar
cousinhub
Merci, encore une fois....
Comme là je travaille à vue, pour le moment, c'est exactement ce que je
veux, mais je pense que je reviendrai, car il me semble que parfois, il
y a plusieurs sections pour le même objet, mais n'ayant pas d'exemple
sous la main, j'attendrai afin de poser avec le maximum d'éléments
Bonne semaine

Existe-t-il un code comme dans VBA, On Error Resume Next
car, il se peut que le fichier ait été déjà renommé (le matin)
et après ajout de nouveaux fichiers, relancer le script, mais en
ignorant les fichiers préalablement renommés


Tout à fait, cette déclaration existe également en VBScript. Toutefois je
pense que la meilleure solution consiste à tester l'existance du fichier
avant de procéder au renommage. Le bout de code devient donc :

If oRe.Test(sLines) Then
sNewName=oRe.Execute(sLines)(0).SubMatches(0) & ".txt"
If Not oFs.FileExists(sNewName) Then
oFile.Move sNewName
End If
End If




Avatar
cousinhub
Bonjour,
après quelques essais, je me suis rendu compte que parfois (assez
rarement), le fichier ne comporte pas le mot Obj, et donc le script se
bloque avec ce code erreur (je suppose que c'est pour cela) :

Ligne : 11
Caract. : 9
Erreur : Chemin d'accès introuvable
Code : 800A004C

Est-il également possible de tester la présence de ce mot, et s'il
n'existe pas, de continuer avec les autres fichiers.
Merci, et bonne soirée

Ps : le code en entier :

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
sNewName=oRe.Execute(sLines)(0).SubMatches(0) & ".txt"
If Not oFs.FileExists(sNewName) Then
oFile.Move sNewName
End If
End If
End If
Next

Existe-t-il un code comme dans VBA, On Error Resume Next
car, il se peut que le fichier ait été déjà renommé (le matin)
et après ajout de nouveaux fichiers, relancer le script, mais en
ignorant les fichiers préalablement renommés


Tout à fait, cette déclaration existe également en VBScript. Toutefois je
pense que la meilleure solution consiste à tester l'existance du fichier
avant de procéder au renommage. Le bout de code devient donc :

If oRe.Test(sLines) Then
sNewName=oRe.Execute(sLines)(0).SubMatches(0) & ".txt"
If Not oFs.FileExists(sNewName) Then
oFile.Move sNewName
End If
End If




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

Bonjour,

| après quelques essais, je me suis rendu compte que parfois (assez
| rarement), le fichier ne comporte pas le mot Obj, et donc le script se
| bloque avec ce code erreur (je suppose que c'est pour cela) :
|
| Ligne : 11
| Caract. : 9
| Erreur : Chemin d'accès introuvable
| Code : 800A004C

Je reproduis cette erreur si la chaine de caractères qui suit Obj/ est
un chemin d'accès. Par exemple :
Obj/c:toto

Pouvez-vous joindre le fichier provoquant cette erreur ?

| Est-il également possible de tester la présence de ce mot, et s'il
| n'existe pas, de continuer avec les autres fichiers.

C'est déjà le cas ;-)

oRe.Pattern="^obj/(.*)r$"
If oRe.Test(sLines) Then
...
End If

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
1 2