使用批处理文件提取字符串的变量部分以用于重命名 txt 文件

发布于 2024-09-27 14:34:40 字数 446 浏览 7 评论 0原文

我使用批处理文件来处理名称格式为:CLL*1.txt、CLLM*2.txt 的文本文件,位于特定的“下载”文件夹中。所有文件都包含以下形式的字符串: “文件引用: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

I'm using batch files to process text files with names of the form: CLL*1.txt, CLLM*2.txt located in a specific "download" folder. All files contain a string of the form:
"File Reference : 0xxxx", where xxxx is a unique numerical identifier.

I am trying, without much success, to use the following script to rename the file to CLL*xxxx.txt (where xxxx replaces the integer suffix). Can anyone help?:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千纸鹤 2024-10-04 14:34:40

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

findstr will not return any single values to you. It will only search for a string and return the whole line. try this 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 

save as myscript.vbs and run it

C:\download_folder> cscript //nologo myscript.vbs c:\download_folder
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文