Windows Batch Script使用可变行格式解析多行文件?

时间:2014-06-10 11:37:07

标签: windows parsing for-loop scripting

我需要解析具有以下格式的文件:

A + tags/RWSTestConsole_tag1/
           (from trunk/RWSTestConsole/:r776)

所以我使用带计数器的FOR / F循环并根据我是否在查看第1行或第2行来检查令牌。一切正常,但第2行的第一个令牌包括前导空格("来自")和a)我认为FOR上的delims会处理空格b)理论上我可以比较一个设置为"的常量字符串。从"但那就是那种笨蛋。

这是我的FOR命令:

for /F "tokens=1,2,3,4,5 delims=():/ " %%a in (svn.txt) DO (

我可以对FOR命令进行更改以忽略空格吗?如果没有办法修剪FOR循环的DO子句中的标记,那么我只得到没有前导空格的单词?

编辑:

这是在脚本中从Subversion SVNLOOK命令输出的,该脚本管理是否允许"标记"要被创造。输出可以是1行,必须格式化为:

D / tags / tagfoldername /

如果它是一行,但它不是实际标记文件夹的删除,那么它就是一个错误。这个案子得到处理。

如果它超过2行,则表示文件列表,这是一个错误。我有办法处理。

我遇到问题的情况是,如果它是2行,则需要采用上面显示的格式:

A + tags / RWSTestConsole_tag1 /     (来自trunk / RWSTestConsole /:r776)

col 1 =" A"。 col 3 =" +",col 5 ="标签"第一行的其余部分是标签文件夹名称。第二行是创建请求的来源,因此它必须从"开始,然后是" trunk"," branches"或"标签"后跟单级文件夹名称和修订号。

我使用了如上所述的FOR命令。在DO子句中,我查看一个计数器来判断我是在解析第1行还是第2行。第1行很简单,我有处理它的所有逻辑。

第2行由同一个FOR命令解析,第一个标记(%% a)删除" {"来自delims,但留下了所有领先的空白,所以我回到了%% a ="从"

我需要知道是否有一种方法可以修改FOR命令以删除空格或在FOR DO子句中修剪%% a以删除空白。

编辑2:FOR循环代码

set c=1
for /F "tokens=1,2,3,4,5 delims=():/ " %%a in (svn.txt) DO (
echo op=%%a, %%b, %%c, %%d, %%e
if !c!==1 (
    set rc1=0
    if /I %%a EQU A (
        if "%%b" EQU "+" (
            if  [%%e] EQU [] (
                echo Tag from a Copy Op
                set rc1=0
            ) else (
                echo Found a subfolder: %%e - not a tag delete
                set rc1=1
            )
        ) else (
            echo Tag not a Copy 
            set rc1=1
        )
    )
)
if !c!==2 (
    set rc2=0
    set str1=%%a
    echo String replace 1 = !str!
    set str2=!str1:~-4!
    echo String Replace 2  *!str2!*
    if /I !str2! EQU FROM (
        set isvalid=false
        if %%b EQU trunk set isvalid=true
        if %%b EQU branches set isvalid=true
        if %%b EQU tags set isvalid=true
        if !isvalid! EQU true (
            set rc2=0
        ) else (
            set rc2=1
            echo Invalid source for Tag Creation
        )
    ) else (
        set rc2=1
        echo Tag not FROM
    )
)
set /a c+=1
)

echo RC1=!rc1!
echo RC2=!rc2!
set /a rc=!rc1!+!rc2!
echo final RC = !rc!

0 个答案:

没有答案