字符串不在遇到提及的分隔符时分隔

时间:2014-11-25 08:14:42

标签: windows batch-file cmd

我有一个文件,我使用for循环解析。我还提到了一个分隔符,因为我想在遇到分隔符时将文本分开。它适用于所有线路接受一个。以下是行

####################################################################################################
# Directory structure
####################################################################################################

DIRLIST         := $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\

我正在使用此代码

setLocal EnableDelayedExpansion
for /f "eol=# tokens=* delims=$(APPLICATION_PATH) " %%a in (test.txt) do (

set part1=%%a

echo part1 = !part1!
pause
)

2 个答案:

答案 0 :(得分:2)

for命令中,delims子句用于指示将用作分隔符的字符列表。在您的情况下,对于发布的数据,分隔符应该是右括号,有两个标记,第一个是左边的文本或分隔符,第二个是分隔符右边的文本

@echo off
setLocal enableextensions disabledelayedexpansion
for /f "tokens=1,* delims=)" %%a in (..\..\..\Make\path_settings.mak) do (
    if not "%%b"=="" echo(%%b
)

只有在行内部存在第二个右括号时才需要两个标记,因此*子句中的token将确保它将包含在检索到的数据中。但这意味着不包含括号的行将其所有数据检索到%%a%%b中没有任何内容,因此if条件是必需的。

如果没有第二个括号,则代码可以简化为

@echo off
setLocal enableextensions disabledelayedexpansion
for /f "tokens=2 delims=)" %%a in (..\..\..\Make\path_settings.mak) do (
    echo(%%a
)

已编辑以反映命令的执行情况

[M:\]:# type test.txt
####################################################################################################
# Directory structure
####################################################################################################

DIRLIST         := $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\
                   $(APPLICATION_PATH)/test/app/model\

[M:\]:# type test.cmd
@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=2 delims=)" %%a in (test.txt) do (
        echo %%a
    )


[M:\]:# test.cmd
/test/app/model\
/test/app/model\
/test/app/model\
/test/app/model\
/test/app/model\
/test/app/model\
/test/app/model\
[M:\]:#

答案 1 :(得分:0)

我认为这实际上不行。关键是delims不能是字符串而是字符。如果使用字符串,则每个char都将被视为delim。

但是,有一种解决方法:

  1. 将您想要作为delim的字符串替换为不在您的字符串中的特殊cahr(例如@,|等)
  2. 使用特殊字符
  3. 拆分修改后的字符串

    您可以在此处找到示例:http://www.computerhope.com/forum/index.php?topic=134599.0回复#3