Renommer un dossier

Fermé
Jordi.D Messages postés 51 Date d'inscription vendredi 11 janvier 2019 Statut Membre Dernière intervention 8 février 2019 - Modifié le 21 janv. 2019 à 15:08
Jordi.D Messages postés 51 Date d'inscription vendredi 11 janvier 2019 Statut Membre Dernière intervention 8 février 2019 - 22 janv. 2019 à 14:07
Salut à tous
J'ai un petit problème j'ai un dossiers XXX200 qui est présent dans plusieurs dossiers Dossier201 dossier202 etc..
je voudrais que le dossier xxx200 prennent la valeur de chaque Dossiers
par exemple : Dossiers206 XXX206 etc

1 réponse

jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
21 janv. 2019 à 16:29
Bonjour,

Donc maintenant, ce n'est plus de la modification de fichier reg, mais juste le renommage de dossier ?

Avec le code que tu as déjà pour les fichiers reg ...il est facile de l'adapter pour cette nouvelle question.
Qu'as tu essayé ?
Sur quoi bloques tu ?

0
Jordi.D Messages postés 51 Date d'inscription vendredi 11 janvier 2019 Statut Membre Dernière intervention 8 février 2019
22 janv. 2019 à 13:15
Bonjour Non ce n'est pas vraiment du renommage
j'ai ce code
Option Explicit ' <=== Déclaration très recommandée pour éviter toute ambiguïté

Const ForReading = 1, ForWriting = 2
Dim fso, fich, Ret, FileName, Ligne, objFolder, SubFold, F
Dim NameFolder, NewValue, nbrReplacement
nbrReplacement = 1
'FileName = ".\Test205\Test.reg" ' Changement de stratégie : FileName doit être lu à partir du dossier qui le contient
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFolder = fso.GetFolder(".") ' Le point indique le dossier en cours, où on place le script(Changement.vbs)
' Pour ton cas, il faut placer le script dans le dossier "Copier"
For Each SubFold In objFolder.SubFolders
' Si le dossier du fichier .reg est de forme BAMxxx, mets "bam" à la place de "test" dans la ligne suivante
If InStr(1, LCase(SubFold.Name), "test", vbTextCompare) > 0 Then
For Each F In SubFold.Files
If LCase(fso.GetExtensionName(F.Name)) = "reg" Then
FileName = F.Path
NameFolder = fso.GetFolder(fso.GetFile(FileName).ParentFolder).Name
NewValue = Quote("Name") & "=" & Quote(NameFolder) ' Nouvelle ligne à écrire
Set fich = fso.OpenTextFile(FileName, ForReading, False)
Do While Not Fich.AtEndOfStream
Ligne = Trim(Fich.ReadLine)
If InStr(1, LCase(Ligne),Quote("name") & "=" & Chr(34) & "test", vbTextCompare) > 0 _
And InStr(1, Ligne, NameFolder, vbTextCompare) = 0 Then ' dans ce cas, on remplace la ligne lue par NewValue
Ligne = NewValue
nbrReplacement = nbrReplacement + 1 ' Compteur pour les remplacements
End If
Ret = Ret & Ligne & vbNewLine
Loop
fich.Close ' On doit fermer le fichier car on va l'utiliser en écriture

Set fich = fso.OpenTextFile(FileName, ForWriting, True)
Ret = Left(Ret, Len(Ret) - 2) ' On supprime le dernier retour chariot (vbNewLine)
fich.Write Ret
fich.Close ' On fermer le fichier
End If
Next
End If
Ret = "" ' Sans cette instruction, Ret sera le cumule de tout ce qui a été lu à partir de tous les fichiers .reg
Next
MsgBox " Nombre de remplacements dans tous les fichiers : " & nbrReplacement
'==========================
Function Quote(StrIn)
Quote = Chr(34) & StrIn & Chr(34)
End Function

Il remplace bien la valeur demander dans un dossier mais je voudrais qu'il le remplace dans tous les dossier
Par exemple si il est possible de le mettre en .exe
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
22 janv. 2019 à 13:57
Primo... je t'ai déjà indiqué que pour poster tes codes sur le forum tu dois utiliser : LES BALISES DE CODE
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Secundo... ce n'est pas un renommage.... pourtant c'est bien ce que tu as écrit dans ton premier message....

Tu parlais d'ailleurs... du renommage de DOSSIER dans un Dossier...
Là.. tu sembles à nouveau vouloir modifier tes fichiers REG ....
Hors il me semblait, vu ton précédent message... que cette question était résolue....

Une fois encore, ta question, les explications que tu donnes, le code que tu montres... sont en totale contradiction. Il faudrait vraiment que tu fasses des efforts car pense bien que nous ne sommes ni devant ton écran... ni dans ta tête. Il faut donc que tu sois le plus précis possible.

Pour ce qui est de l'exe.. non... en VBScript tu ne peux pas.

Si tu veux créer des exe ... il faut que tu le fasses dans un autre langage.
Autoit serait à ta portée... l'écriture du code (du moins dans sa forme) est assez proche du VB ...et il existe, de plus, des fonctions toutes faites pour manipuler des dossiers / fichiers ....

Je t'invite vivement à te renseigner à son sujet.
0
Jordi.D Messages postés 51 Date d'inscription vendredi 11 janvier 2019 Statut Membre Dernière intervention 8 février 2019
22 janv. 2019 à 14:07
Je sais désolé moi et les explications =2

Le code ici modifie le contenue du fichier xxx.reg comme convenue mais il faut le mettre dans chacun des dossiers je voudrais savoir si il y'a pas un moyen de le mettre sous la racine afin qu'il modifie tout les fichiers sans avoir a rentré dans le dossier " J'espéré que je me suis mieux fais comprendre"






Option Explicit ' <=== Déclaration très recommandée pour éviter toute ambiguïté 

Const ForReading = 1, ForWriting = 2
Dim fso, fich, Ret, FileName, Ligne, objFolder, SubFold, F
Dim NameFolder, NewValue, nbrReplacement
nbrReplacement = 1
'FileName = ".\Test205\Test.reg" ' Changement de stratégie : FileName doit être lu à partir du dossier qui le contient
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFolder = fso.GetFolder(".") ' Le point indique le dossier en cours, où on place le script(Changement.vbs)
' Pour ton cas, il faut placer le script dans le dossier "Copier"
For Each SubFold In objFolder.SubFolders
' Si le dossier du fichier .reg est de forme BAMxxx, mets "bam" à la place de "test" dans la ligne suivante
If InStr(1, LCase(SubFold.Name), "test", vbTextCompare) > 0 Then
For Each F In SubFold.Files
If LCase(fso.GetExtensionName(F.Name)) = "reg" Then
FileName = F.Path
NameFolder = fso.GetFolder(fso.GetFile(FileName).ParentFolder).Name
NewValue = Quote("Name") & "=" & Quote(NameFolder) ' Nouvelle ligne à écrire
Set fich = fso.OpenTextFile(FileName, ForReading, False)
Do While Not Fich.AtEndOfStream
Ligne = Trim(Fich.ReadLine)
If InStr(1, LCase(Ligne),Quote("name") & "=" & Chr(34) & "test", vbTextCompare) > 0 _
And InStr(1, Ligne, NameFolder, vbTextCompare) = 0 Then ' dans ce cas, on remplace la ligne lue par NewValue
Ligne = NewValue
nbrReplacement = nbrReplacement + 1 ' Compteur pour les remplacements
End If
Ret = Ret & Ligne & vbNewLine
Loop
fich.Close ' On doit fermer le fichier car on va l'utiliser en écriture

Set fich = fso.OpenTextFile(FileName, ForWriting, True)
Ret = Left(Ret, Len(Ret) - 2) ' On supprime le dernier retour chariot (vbNewLine)
fich.Write Ret
fich.Close ' On fermer le fichier
End If
Next
End If
Ret = "" ' Sans cette instruction, Ret sera le cumule de tout ce qui a été lu à partir de tous les fichiers .reg
Next
MsgBox " Nombre de remplacements dans tous les fichiers : " & nbrReplacement
'==========================
Function Quote(StrIn)
Quote = Chr(34) & StrIn & Chr(34)
End Function
0