如何在文本文件中搜索和替换数据?

时间:2016-03-27 02:30:11

标签: batch-file vbscript

我有一个包含数据的文本文件。我希望在#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脚本中执行此操作?

5 个答案:

答案 0 :(得分:1)

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

Read and write into a file using VBScript

答案 1 :(得分:1)

@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%

的文件

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

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

usebackq告诉cmd引用了文件名。

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

答案 2 :(得分:1)

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

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

JREPL.BAT解决方案使得解决方案几乎无足轻重:

jrepl /?

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

可以通过命令行jrepl /??获取完整文档,也可以使用{{1}}获取分页输出。

答案 3 :(得分:0)

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%

答案 4 :(得分:0)

希望这会对你有帮助..

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