【问题标题】:How to search and replace data in text file?如何搜索和替换文本文件中的数据?
【发布时间】:2016-03-28 06:21:21
【问题描述】:

我有一个包含数据的文本文件。我想复制#NAME:,之后的文字,然后再添加一些文字。

原始文件:

#NAME:,Disco Ball
http://my.site.com/discoball.mp3
#NAME:,Lasers
http://my.site.com/lasers.mp3

新建文本文件:

#NAME:,mp3-id="Disco Ball",Disco Ball
http://my.site.com/discoball.mp3
#NAME:,mp3-id="Lasers",Lasers
http://my.site.com/lasers.mp3

如您所见,我希望能够复制#NAME:, 之后的文本,然后将其添加到新文本mp3-id=" ",

如何在批处理文件或 VB 脚本中执行此操作?

【问题讨论】:

  • 您必须向我们展示您的一些努力,因此请编辑您的问题并发布您迄今为止尝试过的代码!

标签: batch-file vbscript


【解决方案1】:

如果您决定使用 VBScript:打开文件并将内容复制到字符串中,替换正确的部分,然后写入文件。

Read and write into a file using VBScript

【讨论】:

    【解决方案2】:
    @ECHO OFF
    SETLOCAL
    SET "sourcedir=U:\sourcedir"
    SET "destdir=U:\destdir"
    SET "filename1=%sourcedir%\q36242413.txt"
    SET "outfile=%destdir%\outfile.txt"
    (
    FOR /f "usebackqtokens=1*delims=:," %%a IN ("%filename1%") DO (
     IF /i "%%a"=="#NAME" ECHO(%%a:,mp3-id="%%b",%%b
     IF /i "%%a"=="http" ECHO(%%a:%%b
    )
    )>"%outfile%"
    
    GOTO :EOF
    

    您需要更改sourcedirdestdir 的设置以适应您的情况。

    我使用了一个名为 q36242413.txt 的文件,其中包含您的数据用于我的测试。

    生成定义为 %outfile% 的文件

    只需读取文件的每一行并将:, 用作分隔符,这意味着“:, 都是分隔符。

    因此,这些行被分配为(第一个定界符序列之前的部分)到 %%a 和(行的其余部分)到 %%b(这是 tokens=1* 的操作)

    usebackq 告诉 cmd 文件名已被引用。

    因此,%%a 将获取#NAMEhttp%%b 在第一个分隔符序列之后的行的其余部分,因此测试正在使用的和echo 出适当的替换字符串。

    【讨论】:

      【解决方案3】:

      如果您可以接受 VBS,那么您应该也可以使用 JScript。

      JREPL.BAT regular expression find/replace utility 是纯脚本(混合 JScript/batch),可以在 XP 以后的任何 Windows 机器上本地运行。

      JREPL.BAT 解决方案使解决方案几乎是微不足道的:

      jrepl "(^#NAME:,)(.*)" "$1mp3-id=\q$2\q,$2" /x /f test2.txt /o -
      

      如果您将命令放在批处理脚本中,请使用 CALL JREPL。

      完整的文档可以通过jrepl /?从命令行获得,或者使用jrepl /??进行分页输出。

      【讨论】:

        【解决方案4】:

        Magoo

        的回答稍作调整

        您可以在这批拖放文件文本来转换您的数据:

        @Echo off
        Set "filename=%1"
        For %%i in (%filename%) Do (set outfile="%%~ni_converted%%~xi")
        (
            For /f "usebackq tokens=1* delims=:," %%a in (%filename%) Do (
            If /i "%%a"=="#NAME" ECHO(%%a:,mp3-id="%%b",%%b
            If /i "%%a"=="http" ECHO(%%a:%%b
            )
        )>%outfile%
        

        【讨论】:

          【解决方案5】:

          希望对你有所帮助..

          VBScript 代码:

          filename = "C:\path\file.txt"
          textToSearch= "#NAME:,"
          attachText= "mp3-id="
          Set fso = CreateObject("Scripting.FileSystemObject")
          Set f = fso.OpenTextFile(filename)
          Set outputFile = fso.CreateTextFile("C:\path\output.txt", True) 
          Do Until f.AtEndOfStream
            fileLine=f.ReadLine 
            if Instr(1,fileLine, textToSearch ) then
               reminingText=Replace(fileLine ,textToSearch , "")
               '#NAME:,mp3-id="Disco Ball",Disco Ball
               newLineText= textToSearch & attachText & chr(34) & reminingText & chr(34) & "," & reminingText
            else
               newLineText=fileLine
            End if
            outputFile.WriteLine(newLineText)   
          Loop
          outputFile.Close 
          f.Close
          

          【讨论】:

            猜你喜欢
            • 2013-06-13
            • 1970-01-01
            • 1970-01-01
            • 2010-09-18
            • 1970-01-01
            • 2016-10-18
            • 1970-01-01
            相关资源
            最近更新 更多