当遇到提及的分隔符时,字符串不能分隔

问题描述:

我有一个文件,我正在使用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 
) 
+0

的执行使用延迟扩展,可使用'回声part1的= !part1!' – Stephan 2014-11-25 08:56:50

+0

我曾尝试使用并修改过我的代码,但我仍然收到DIRLIST:= $(APPLICATION_PATH)/ test/app/model \ Setlocal EnableDelayedExpansion for /f "eol=# tokens=* delims=$(APPLICATION_PATH) " %%a in (..\..\..\Make\path_settings.mak) do ( \t \t set part1=%%a \t echo part1 = !part1! \t \t pause ) 2014-11-25 09:13:29

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:\]:# 
+0

对于造成的困惑感到抱歉,括号内的内容为评论 – 2014-11-25 09:17:11

+0

@SandeepBhat,我正在重读这个问题和我的答案,还有一件事我看不清楚。究竟应该是最终的输出? – 2014-11-25 09:21:27

+0

对不起,我需要的输出是每行的/ test/app/model \/test/app/model \/test/app/model \/test/app/model \ – 2014-11-25 09:25:28

我觉得这其实不应该工作线。关键是分隔符不能是字符串,而是字符。如果你使用一个字符串,每个字符将被视为一个分隔符。

然而,有一种变通方法:

  1. 更换要作为一个特殊的cahr一个DELIM不会在你的字符串的字符串(如@,|等)
  2. 使用特殊字符

您可以在这里找到一个例子拆分修改后的字符串:http://www.computerhope.com/forum/index.php?topic=134599.0回复#3

+0

正确。除此之外,'tokens = *'覆盖'delims = ...'并且你得到整行 – Stephan 2014-11-25 08:54:49

+0

@Stephan,覆盖只是部分。如果行以'delims'子句中包含的字符开头,则它们将不包含在检索到的数据中。 – 2014-11-25 09:16:04