我有一个包含数据的文本文件。我希望在#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脚本中执行此操作?
答案 0 :(得分:1)
如果您决定使用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
您需要更改sourcedir
和destdir
的设置以适合您的具体情况。
我使用了一个名为q36242413.txt
的文件,其中包含我的测试数据。
生成定义为%outfile%
的文件只需阅读文件的每一行,并使用:,
作为delim,这意味着“:
和,
都是分隔符。
因此,行被分配为(第一个分隔符序列之前的部分)到%% a和(行的其余部分)到%%b
(这是tokens=1*
的动作)
usebackq
告诉cmd
引用了文件名。
因此,%%a
将在第一个分隔符序列之后获取行的其余部分#NAME
或http
和%%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