【问题标题】:CMD script - Truncate string in a for loopCMD 脚本 - 在 for 循环中截断字符串
【发布时间】:2015-02-25 00:55:58
【问题描述】:

我的输入是一个文本文件 (itemLabels.txt),其中包含 4 行字符串,例如:

标签 4.3.23 对应时间 Thu Feb 13 16:30:37 EST 2014

标签 R4.4 对时间 Fri Jul 25 08:00:00 EDT 2014 发表评论 2014 年 7 月 26 日发布

标签 976053_Release4_5 对应时间 2014 年 10 月 14 日星期二 11:04:53 EDT

标签 My 4th Label 反对时间 2015 年 2 月 24 日星期二 19:23:05 EST 2015 年,评论截至今天

我需要提取“标签”和“反对”之间的所有突出显示的字符串。我尝试了一个简单的脚本,例如:

setlocal enabledelayedexpansion
for /f "tokens=1,*" %%a in (itemLabels.txt) do (
    set Label=%%b
    set Label=!Label:* against =!
    echo !Label!
)

但是,这会删除“反对”一词之前的所有内容。有没有办法在“反对”之后截断所有内容并返回字符串?在“反对”之后用 * 替换该行不起作用...

set Label=!Label: against *=!

提前感谢您的帮助。

【问题讨论】:

    标签: string loops for-loop cmd truncate


    【解决方案1】:

    一种解决方案是“通过against time标记该行的其余部分并获得第一个标记”。太糟糕了for /f ... 命令只能按单个字符分割。

    但您可以先将该字符串替换为某个单个字符(您确定不会出现在标签名称中,我选择了*),然后将其拆分:

    setlocal enabledelayedexpansion
    for /f "tokens=1,*" %%a in (itemLabels.txt) do (
        set Label=%%b
        for /f "tokens=1 delims=*" %%c in ("!Label: against time =*!") do (
            echo %%c
        )
    )
    

    【讨论】:

    • 我仍然对通配符 (*) 可以在我要替换的字符串之前使用,但不能在之后使用感到恼火!
    • 是的,星号只能用作前缀,这很糟糕。至少它在set /? 帮助页面中有正确的记录,这是毫无疑问的。
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多