我是CMD批处理的新手,我正在编写一个小脚本,该脚本应该包含一个包含.csv文件列表的文件,并删除除两行之外的每个文件的标题。要保留的一行包含单词" Timestamp",它看起来像这样: "时间戳:2013-10-31T16:26:48.0110000"。 保持标题结束的另一行始终以" Time(ms)"作为第一个标记。 最初我假设标题是常量(第1-20行)并且只保留第2行和第20行。现在我需要我的脚本来实际检测标题的结尾,因为有24行标题的文件。 这是现在的脚本
@if (@X)==(@Y) @end /* Harmless hybrid line that begins a JScript comment
setlocal
@echo off
for /f "tokens=*" %%a in (list.txt) do (
findstr /n "^" "%%a"|repl "^(1|10|11|12|1?[3456789]):" ":"|repl "^\d+:" "" A >"%%a.new"
move /y "%%a.new" "%%a" >nul
)
致@dbenham的信用,他帮助了很多人在回答上一个问题时编写了第一个脚本并发布了一个名为repl.bat的实用程序。
提前致谢
David RODRIGUEZ
答案 0 :(得分:0)
这是一个应该是健壮的解决方案。它使用名为findrepl.bat
的工具,这是一种类似grep的工具,其编写方式与repl.bat
类似。
这使用名为findrepl.bat
的帮助程序批处理文件 - 从https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
将findrepl.bat
放在与批处理文件相同的文件夹中或路径上。
@echo off
for /f "delims=" %%a in (list.txt) do (
type "%%a"|findrepl "^" /e:"^Time\(ms\)" /b:"Timestamp" >"%%a.new"
type "%%a"|findrepl "^Time\(ms\)" /o:0:999999 >>"%%a.new"
move /y "%%a.new" "%%a" >nul
)
pause
这假设Time(ms)
位于第1列,理论上它将处理最多100万行的文件。