2010-10-11 4 views
0

J'utilise des fichiers batch pour traiter des fichiers texte avec des noms de la forme: CLL * 1.txt, CLLM * 2.txt situé dans un dossier "download" spécifique. Tous les fichiers contiennent une chaîne du formulaire: "File Reference: 0xxxx", où xxxx est un identifiant numérique unique.Utilisation d'un fichier batch pour extraire la partie variable d'une chaîne à utiliser pour renommer les fichiers txt

J'essaye, sans beaucoup de succès, d'utiliser le script suivant pour renommer le fichier en CLL * xxxx.txt (où xxxx remplace le suffixe d'entier). Quelqu'un peut-il aider ?:

set target="S:\download\" 

SetLocal EnableDelayedExpansion enableextensions 

for /f "usebackq tokens=2 delims=:" %%i IN (`findstr /b "File Reference :" %target%CLL*.txt`) do ( 

    ren %target%CLL*.txt CLL*%%i.txt 

) 


Endlocal 

Répondre

0

findstr ne reviendra aucune valeur unique pour vous. Il cherchera seulement une chaîne et retournera toute la ligne. essayez cette vbscript

Set objFS = CreateObject("Scripting.FileSystemObject") 
Set d = CreateObject("Scripting.Dictionary") 
strFolder= WScript.Arguments(0) 
Set objFolder = objFS.GetFolder(strFolder) 
For Each strFile In objFolder.Files 
    If objFS.GetExtensionName(strFile) = "txt" Then  
     strFileName = strFile.Name   
     Set objFile = objFS.OpenTextFile(strFile)  
     Do Until objFile.AtEndOfStream 
      strLine=objFile.ReadLine 
      If InStr(strLine,"File Reference") > 0 Then 
       s=Split(strLine,"File Reference : ") 
       num=Split(s(UBound(s))," ") 
       number=Mid(num(0),2) 'get the number 
       strNewFileName = "CLL"&CStr(number)&".txt" 
       objFile.Close    
       strFile.Name = strNewFileName 
       Exit Do 
      End If   
     Loop  
     Set objFile=Nothing 
    End If 
Next 

Enregistrer sous myscript.vbs et l'exécuter

C:\download_folder> cscript //nologo myscript.vbs c:\download_folder 
+0

Merci. Utilisez vbscript pour formater les fichiers txt, mais utilisez des fichiers batch pour les renommer et les déplacer en fonction du contenu. Convaincu que l'utilisation de jetons et delims ne fournirait qu'une partie d'une chaîne fournie par findstr/b –

Questions connexes