Page 1 sur 1
[R] Rechercher Remplacer Copier un morceau de texte
Posté : jeu. 22 sept. 2011 13:40
par vincentr
Bonjour,
Suite à une migration de serveur, je dois modifier des scripts de connexion.
Avant .bat
► Afficher le texte
net use f: \\serveur1\rep1
net use h: \\serveur2\rep2
net use g: \\serveur3\rep3
net use k: \\serveur2\rep4
Apres .bat
► Afficher le texte
net use f: \\serveur1\rep1
net use h: /delete
net use h: \\serveur1\rep2
net use g: \\serveur3\rep3
net use k: /delete
net use k: \\serveur1\rep4
Donc, le serveur2 n'existe plus, les fichiers ont été transféré vers serveur1.
Je pensais faire une recherche de "serveur2", récupérer la lettre du net use pour faire un /delete mais il faudrait le mettre juste avant puis modifier serveur2 par serveur1.
J'espère que j'ai été clair.
J'ai trouvé comment modifier serveur2 par serveur1 mais pour le reste, pouvez vous m'aider ?
Merci de votre aide.
Re: [..] Rechercher Remplacer Copier un morceau de texte
Posté : jeu. 22 sept. 2011 14:27
par PandiPanda
voici un script qui fait ce que vous demandez, vite fait ^.^
► Afficher le texte
Code : Tout sélectionner
#Include <File.au3>
#Include <Array.au3>
Global $__PathFile=@ScriptDir&"\test.txt"
Global $__ArrayFile
Global $__ArrayFile_2[1]=["juste pour la creation de l'array :p"]
If _FileReadToArray($__PathFile,$__ArrayFile) Then
For $i=1 To $__ArrayFile[0]
If StringInStr($__ArrayFile[$i],"serveur2") <> 0 Then
_ArrayAdd($__ArrayFile_2,_StringBetween2String($__ArrayFile[$i],"",":")&": /delete")
_ArrayAdd($__ArrayFile_2,StringReplace($__ArrayFile[$i],"serveur2","serveur1"))
Else
_ArrayAdd($__ArrayFile_2,$__ArrayFile[$i])
EndIf
Next
_FileWriteFromArray($__PathFile,$__ArrayFile_2,1)
Else
MsgBox(64,"erreur",'erreur ouverture/lecture du fichier')
EndIf
Func _StringBetween2String($String,$StringDebut,$StringFin,$caseSense=False)
If ((IsString($String) And IsString($StringDebut) And IsString($StringFin)) And IsBool($caseSense)) Then
Local $case=0
If $caseSense Then
$case=1
EndIf
If $StringDebut = "" Then
Return StringMid ($String,1,(StringInStr($String,$StringFin,$case,1))-1)
ElseIf $StringFin = "" Then
Return StringMid ($String,(StringInStr($String,$StringDebut,$case))+StringLen($StringDebut))
Else
Local $debut=StringInStr($String,$StringDebut,$case)
If @error = 0 Then
Local $fin=StringInStr($String,$StringFin,$case,1,$debut)
If $fin <> $debut Then
Local $realDebut=$debut+StringLen($StringDebut)
Return StringMid($String,$realDebut,$fin-$realDebut)
EndIf
EndIf
EndIf
EndIf
SetError(1);erreur parametre
Return ""
EndFunc
Re: [..] Rechercher Remplacer Copier un morceau de texte
Posté : jeu. 22 sept. 2011 15:54
par vincentr
vraiment merci, ton script marche super bien pour un fichier mais lorsque je veux lui faire parcourir tout un répertoire, le fichier suivant se retrouve avec le contenu du fichier précédent. Je suis pas très à l'aise avec auto it mais voici ce que j'ai fait :
► Afficher le texte
#include <File.au3>
#include <Array.au3>
Global $__ArrayFile
Global $__ArrayFile_2[1] = ["juste pour la creation de l'array :p"]
Global $repertoire = "c:\rep"
$FileList = _FileListToArray($repertoire, "*.bat", 1)
For $p = 1 To $FileList[0]
$PathFile = $repertoire & "\" & $FileList[$p]
modif_fichier($PathFile)
Next
Func modif_fichier($__PathFile)
If _FileReadToArray($__PathFile, $__ArrayFile) Then
For $i = 1 To $__ArrayFile[0]
If StringInStr($__ArrayFile[$i], "serveur2") <> 0 Then
_ArrayAdd($__ArrayFile_2, _StringBetween2String($__ArrayFile[$i], "", ":") & ": /delete")
_ArrayAdd($__ArrayFile_2, StringReplace($__ArrayFile[$i], "serveur2", "serveur1"))
Else
_ArrayAdd($__ArrayFile_2, $__ArrayFile[$i])
EndIf
Next
_FileWriteFromArray($__PathFile, $__ArrayFile_2, 1)
Else
MsgBox(64, "erreur", 'erreur ouverture/lecture du fichier')
EndIf
EndFunc ;==>modif_fichier
Func _StringBetween2String($String, $StringDebut, $StringFin, $caseSense = False)
If ((IsString($String) And IsString($StringDebut) And IsString($StringFin)) And IsBool($caseSense)) Then
Local $case = 0
If $caseSense Then
$case = 1
EndIf
If $StringDebut = "" Then
Return StringMid($String, 1, (StringInStr($String, $StringFin, $case, 1)) - 1)
ElseIf $StringFin = "" Then
Return StringMid($String, (StringInStr($String, $StringDebut, $case)) + StringLen($StringDebut))
Else
Local $debut = StringInStr($String, $StringDebut, $case)
If @error = 0 Then
Local $fin = StringInStr($String, $StringFin, $case, 1, $debut)
If $fin <> $debut Then
Local $realDebut = $debut + StringLen($StringDebut)
Return StringMid($String, $realDebut, $fin - $realDebut)
EndIf
EndIf
EndIf
EndIf
SetError(1);erreur parametre
Return ""
EndFunc ;==>_StringBetween2String
Re: [..] Rechercher Remplacer Copier un morceau de texte
Posté : jeu. 22 sept. 2011 21:28
par PandiPanda
Ce script devrai faire l'affaire ^^
► Afficher le texte
Code : Tout sélectionner
#Include <File.au3>
Global $repertoire =@ScriptDir&"\test"
vincentr($repertoire)
Func vincentr($PathFolder,$sFilter="*.bat")
Local $array=_FileListToArray(@ScriptDir&"\test",$sFilter,1)
If $array=0 Then
MsgBox(64,"erreur","erreur path dossier")
Else
If $array[0] > 0 Then
Local $file,$strTmp
For $i=1 To $array[0]
$file=FileOpen($repertoire&"\"&$array[$i],0)
If $file=-1 Then
MsgBox(64,"erreur","erreur ouverture fichier 1")
Else
$strTmp=FileRead($file)
FileClose($file)
$file=FileOpen($repertoire&"\"&$array[$i],2)
If $file=-1 Then
MsgBox(64,"erreur","erreur ouverture fichier 2")
Else
FileWrite($file,_ReplaceAndAddString($strTmp))
FileClose($file)
EndIf
EndIf
Next
EndIf
EndIf
EndFunc
Func _ReplaceAndAddString($string="",$replaceString="serveur2",$addString=": /delete")
If $string <> "" And StringInStr($string,"serveur2") <>0 Then
Local $str=StringSplit($string,@LF,0)
$tmp=""
For $i=1 To $str[0]
If StringInStr($str[$i],"serveur2") <> 0 Then
$tmp&=_StringBetween2String($str[$i],"",":")&$addString&@CRLF
$tmp&=StringReplace($str[$i],$replaceString,"serveur1")
Else
$tmp&=$str[$i]
EndIf
Next
Return $tmp
Else
Return $string
EndIf
EndFunc
Func _StringBetween2String($String, $StringDebut, $StringFin, $caseSense = False)
If ((IsString($String) And IsString($StringDebut) And IsString($StringFin)) And IsBool($caseSense)) Then
Local $case = 0
If $caseSense Then
$case = 1
EndIf
If $StringDebut = "" Then
Return StringMid($String, 1, (StringInStr($String, $StringFin, $case, 1)) - 1)
ElseIf $StringFin = "" Then
Return StringMid($String, (StringInStr($String, $StringDebut, $case)) + StringLen($StringDebut))
Else
Local $debut = StringInStr($String, $StringDebut, $case)
If @error = 0 Then
Local $fin = StringInStr($String, $StringFin, $case, 1, $debut)
If $fin <> $debut Then
Local $realDebut = $debut + StringLen($StringDebut)
Return StringMid($String, $realDebut, $fin - $realDebut)
EndIf
EndIf
EndIf
EndIf
SetError(1);erreur parametre
Return ""
EndFunc ;==>_StringBetween2String
Re: [..] Rechercher Remplacer Copier un morceau de texte
Posté : ven. 23 sept. 2011 09:00
par vincentr
je suis désolé de te déranger mais maintenant, j'ai perdu ma mise en page.
Tout est à la suite et mon .bat n'est pas interprété par contre si je l'ouvre avec notepad++, les □ sont bien des "entrées"
► Afficher le texte
@echo off□□net use f: \\serveur1\rep1□□net use T: /delete□net use t: \\serveur1\rep2
Re: [..] Rechercher Remplacer Copier un morceau de texte
Posté : ven. 23 sept. 2011 11:04
par vincentr
j'ai fait un peu plus des tests, sur x fichiers .txt aucun problème, le script marche bien par contre sur x fichiers .bat, je me retrouve avec le problème.
Re: [..] Rechercher Remplacer Copier un morceau de texte
Posté : ven. 23 sept. 2011 12:10
par vincentr
j'avance petit à petit, je pense qu'il faudrait que j'utilise la fonction StringStripCR.
Si qq1 peut m'aider.
[R] Rechercher Remplacer Copier un morceau de texte
Posté : lun. 26 sept. 2011 09:55
par vincentr
Voici le script terminé. Merci pour votre aide
► Afficher le texte
#Include <File.au3>
Global $repertoire =@ScriptDir&"\test"
vincentr($repertoire)
Func vincentr($PathFolder,$sFilter="*.bat")
Local $array=_FileListToArray(@ScriptDir&"\test",$sFilter,1)
If $array=0 Then
MsgBox(64,"erreur","erreur path dossier")
Else
If $array[0] > 0 Then
Local $file,$strTmp
For $i=1 To $array[0]
$file=FileOpen($repertoire&"\"&$array[$i],0)
If $file=-1 Then
MsgBox(64,"erreur","erreur ouverture fichier 1")
Else
$strTmp=FileRead($file)
FileClose($file)
$file=FileOpen($repertoire&"\"&$array[$i],2)
If $file=-1 Then
MsgBox(64,"erreur","erreur ouverture fichier 2")
Else
$CRLF = StringReplace(_ReplaceAndAddString($strTmp), @CR, @CRLF)
FileWrite($file,StringReplace($CRLF, @LF, @CRLF))
FileClose($file)
EndIf
EndIf
Next
EndIf
EndIf
EndFunc
Func _ReplaceAndAddString($string="",$replaceString="serveur2",$addString=": /delete")
If $string <> "" And StringInStr($string,"serveur2") <>0 Then
Local $str=StringSplit($string,@LF,0)
$tmp=""
For $i=1 To $str[0]
If StringInStr($str[$i],"serveur2") <> 0 Then
$tmp&=_StringBetween2String($str[$i],"",":")&$addString&@CRLF
$tmp&=StringReplace($str[$i],$replaceString,"serveur1")
Else
$tmp&=$str[$i]
EndIf
Next
Return $tmp
Else
Return $string
EndIf
EndFunc
Func _StringBetween2String($String, $StringDebut, $StringFin, $caseSense = False)
If ((IsString($String) And IsString($StringDebut) And IsString($StringFin)) And IsBool($caseSense)) Then
Local $case = 0
If $caseSense Then
$case = 1
EndIf
If $StringDebut = "" Then
Return StringMid($String, 1, (StringInStr($String, $StringFin, $case, 1)) - 1)
ElseIf $StringFin = "" Then
Return StringMid($String, (StringInStr($String, $StringDebut, $case)) + StringLen($StringDebut))
Else
Local $debut = StringInStr($String, $StringDebut, $case)
If @error = 0 Then
Local $fin = StringInStr($String, $StringFin, $case, 1, $debut)
If $fin <> $debut Then
Local $realDebut = $debut + StringLen($StringDebut)
Return StringMid($String, $realDebut, $fin - $realDebut)
EndIf
EndIf
EndIf
EndIf
SetError(1);erreur parametre
Return ""
EndFunc ;==>_StringBetween2String
Re: [..] Rechercher Remplacer Copier un morceau de texte
Posté : lun. 26 sept. 2011 11:47
par Jerome
Coucou,
Merci de bien vouloir mettre [R] dans le titre de votre premier message si votre sujet est résolut.
Merci.
Jérôme