【问题标题】:Why Delimeter in For Doesn't Work? [duplicate]为什么 For 中的分隔符不起作用? [复制]
【发布时间】:2017-07-02 07:19:12
【问题描述】:

我试图用分隔符“:”来划分文件,但它似乎是用行来划分的。

这是我的代码:

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
...

对此有何解释?

【问题讨论】:

  • 除了不同数量的标记之外,另一个问题完美地演示了如何使用分隔符将文本文件拆分为标记。在命令提示符窗口中输入for /? 时,您是否阅读过帮助文本?

标签: batch-file delimiter


【解决方案1】:

For /f 从文件中读取行并根据 delimiter-set 和 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 处理,依次将每个字符串分配给%%techo 为每个字符串生成一行,而封闭的引号再次被~ 删除。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多