Использование командного файла для извлечения переменной части строки для использования при переименовании текстовых файлов - PullRequest
0 голосов
/ 11 октября 2010

Я использую пакетные файлы для обработки текстовых файлов с именами в форме: CLL * 1.txt, CLLM * 2.txt, расположенной в определенной папке «download». Все файлы содержат строку вида: «Ссылка на файл: 0xxxx», где xxxx - уникальный числовой идентификатор.

Я пытаюсь без особого успеха использовать следующий скрипт для переименования файла в CLL * xxxx.txt (где xxxx заменяет целочисленный суффикс). Кто-нибудь может помочь?:

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

1 Ответ

0 голосов
/ 11 октября 2010

findstr не вернет вам ни одного значения.Он будет только искать строку и возвращать всю строку.попробуйте этот 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 

сохранить как myscript.vbs и запустите

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