为什么Delimeter不能工作?

时间:2017-07-02 07:19:13

标签: batch-file delimiter

我试图通过分隔符":"来划分文件,但它似乎将它除以行。

这是我的代码:

FOR /f "tokens=* delims=:" %%x in (SomeFile.txt) DO echo %%x

这是" SomeFile.txt":
1:2:3:4:5:6:7
8:9:10:11:12:13:14个
......

我希望它是:

1
2
3
4
5
...

但我得到的文件原样:
1:2:3:4:5:6:7
8:9:10:11:12:13:14个
...

对此有何解释?

1 个答案:

答案 0 :(得分:1)

For /f从文件中读取行,并根据分隔符集和tokens设置对其进行标记。

由于您使用tokens=*,所有令牌都会分配给元变量 %%x

如果您发布实际数据会更好,因为解决方案可能会受到实际数据格式的影响,但为了产生结果,另一种方法是:

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q44868366.txt"
    for /f "delims=" %%a in (%filename1%) do CALL :uncolon "%%a"
    )

GOTO :EOF

:uncolon
SET "line=%~1"
FOR %%t IN ("%line::=" "%") DO ECHO %%~t
goto :eof

(我将变量filename1设置为包含您的测试数据的文件)

此处,每行依次分配给%%a,然后由子程序:uncolon处理

子例程接受line的第一个参数,并删除带有~修饰符的封闭引号。

变量line然后将每个冒号替换为" ",并将结果字符串本身括在双引号中。结果是一系列带引号的字符串,然后简单的for进行处理,依次为%%t分配,echo为每个字符串生成一行,并用{再次删除封闭的引号{1}}。

......但很大程度上取决于所涉及的实际数据。