我有一个文件,我使用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 :(得分: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。
但是,有一种解决方法:
您可以在此处找到示例:http://www.computerhope.com/forum/index.php?topic=134599.0回复#3