用于更改txt文件的批处理脚本

时间:2014-02-16 13:41:47

标签: batch-file

我有一个格式为txt的文件:

text1.text2.text3   text4   text5   text6
text7.text8.text9   text10  text11  text12
etc....

我需要一个脚本,它将生成一个新的txt文件格式:

<record>
<string id="day_of_month" value="text1"/>
<string id="month" value="text2"/>
<string id="year" value="text3"/>
<string id="time" value="tekst4"/>
<string id="home_team_id" value="text5"/>
<string id="away_team_id" value="text6"/>
</record>
<record>
<string id="day_of_month" value="text7"/>
<string id="month" value="text8"/>
<string id="year" value="text9"/>
<string id="time" value="text10"/>
<string id="home_team_id" value="text11"/>
<string id="away_team_id" value="text12"/>
</record>
etc....

等....意味着没有定义行数。

2 个答案:

答案 0 :(得分:1)

以下脚本可以使用:

@echo off

set in=in.txt
set out=output.txt

(for /f "tokens=1-6 delims=. " %%i in (
    %in%
) do (
    echo ^<record^>
    echo ^<string id="day_of_month" value="%%i"/^>
    echo ^<string id="month" value="%%j"/^>
    echo ^<string id="year" value="%%k"/^>
    echo ^<string id="time" value="%%l"/^>
    echo ^<string id="home_team_id" value="%%m"/^>
    echo ^<string id="away_team_id" value="%%n"/^>
    echo ^</record^>
)) > %out%

答案 1 :(得分:0)

下面非常有效的解决方案使用REPL.BAT - a hybrid JScript/batch utility执行正则表达式搜索并替换每一行stdin并将结果写入stdout。该实用程序是纯本机脚本,可以从XP开始在任何现代Windows机器上运行,无需任何第三方.exe文件。完整文档嵌入在REPL.BAT中。

假设REPL.BAT位于您当前的目录中,或者更好,位于PATH中的某个位置,那么:

@echo off
setlocal enableDelayedExpansion

:: Setup search and replace strings
set "search=(.*?)\.(.*?)\.([\S]*)\s*([\S]*)\s*([\S]*)\s*(.*)"
set "repl=<record>\r\n"
set "n=1"
for %%A in (day_of_month month year time home_team_id away_team_id) do (
  set "repl=!repl!<string id=\q%%A\q value=\q$!n!\q/>\r\n"
  set /a n+=1
)
set "repl=!repl!</record>"

:: Do all the work
type input.txt|repl.bat search repl xv >output.txt