当遇到提及的分隔符时,字符串不能分隔
我有一个文件,我正在使用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
)
在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:\]:#
对于造成的困惑感到抱歉,括号内的内容为评论 – 2014-11-25 09:17:11
@SandeepBhat,我正在重读这个问题和我的答案,还有一件事我看不清楚。究竟应该是最终的输出? – 2014-11-25 09:21:27
对不起,我需要的输出是每行的/ test/app/model \/test/app/model \/test/app/model \/test/app/model \ – 2014-11-25 09:25:28
我觉得这其实不应该工作线。关键是分隔符不能是字符串,而是字符。如果你使用一个字符串,每个字符将被视为一个分隔符。
然而,有一种变通方法:
- 更换要作为一个特殊的cahr一个DELIM不会在你的字符串的字符串(如@,|等)
- 使用特殊字符
您可以在这里找到一个例子拆分修改后的字符串:http://www.computerhope.com/forum/index.php?topic=134599.0回复#3
正确。除此之外,'tokens = *'覆盖'delims = ...'并且你得到整行 – Stephan 2014-11-25 08:54:49
@Stephan,覆盖只是部分。如果行以'delims'子句中包含的字符开头,则它们将不包含在检索到的数据中。 – 2014-11-25 09:16:04
的执行使用延迟扩展,可使用'回声part1的= !part1!' – Stephan 2014-11-25 08:56:50
我曾尝试使用并修改过我的代码,但我仍然收到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