我正在处理一个批处理脚本,它提取了一些行的数据。
我使用以下方法阅读了我的文件:
for /l %%x in (1, 1, !number_of_equipements!) do (
set x=%%i
...processing...
)
但有时候在我的文件中,我分割了这样的一行:
Cisco Web Usage Controls - Web Categorization Prefix Filters: 1438235190 (Thu
Jul 30 06:00:38 2015)
我需要抓住日期进行一些计算,不幸的是我的x变量将包含分离迭代中的第一行和第二行。
最好的办法是什么?我曾考虑过用一定的条件重写整个文件,或者根据我的脚本正在读取的行做异常,但它都是脏的。有什么好办法吗? 提前感谢您的提议。
答案 0 :(得分:2)
您可以检查一行是否包含(
但不包含)
;如果两个条件都为真,则将第二行与前一行连接。类似的东西:
@echo off
setlocal enabledelayedexpansion
set "file=whatever.log"
>fixed.log (
for /f "usebackq delims=" %%I in ("%whatever%") do (
if defined prev (
set "line=!prev! %%I"
set "prev="
echo(!line!
) else (
set "line=%%I"
if "!line!" neq "!line:(=!" if "!line!" equ "!line:)=!" (
set "prev=!line!"
) else (
echo(%%I
)
)
)
)
...然后将日期从固定文本文件中删除,就像线条包装没有弄乱一样。
我还没有测试过这个。您的里程可能会有所不同。
答案 1 :(得分:0)
我已经像这样进行了修改来处理没有括号的行:
>fixed.log (
for /f "usebackq delims=" %%I in ("%file%") do (
if defined prev (
set "line=!prev! %%I"
set "prev="
echo(!line!
) else (
set "line=%%I"
if "!line!" neq "!line:(=!" (
if "!line!" equ "!line:)=!" (
set "prev=!line!"
) else (
echo(%%I
)
) else (
echo(%%I
)
)
)
)
因此,复制的行仍然存在,我无法弄清楚如何避免......但它就像一个魅力,非常感谢你!