如何从一行中删除某些单词,但将其余部分放入带有批处理的字符串/变量中?

Posted

技术标签:

【中文标题】如何从一行中删除某些单词,但将其余部分放入带有批处理的字符串/变量中?【英文标题】:How can I remove certain words from a line but put the rest of it into a string/variable with batch? 【发布时间】:2019-06-27 05:21:28 【问题描述】:

我正在制作一个批处理程序,需要在 .txt 文件中采用这一行:

Random Characters: 93h4-283ed-93j2-je82

只取93h4-283ed-93j2-je82 并将其放入变量中。 (它在 txt 文件中的第一行)

我该怎么做?我在互联网上四处查看,但我发现的大多数答案都没有按照我想要的方式工作。

我查看了 Stack Overflow 和其他来源,但如果它包含一些单词,它们会使整行消失,而我只想取一行并将其放入批处理变量/字符串中。

text.txt

Random Characters: 93h4-283ed-93j2-je82

textf.txt 应该是

93h4-283ed-93j2-je82

【问题讨论】:

你试过什么,你卡在哪里了?请分享您的编码尝试! 【参考方案1】:

完全基于您提供的内容,即拆分text.txt 的第一行,将所有内容保留在两个字符的第一个序列之后,:  并输出到textf.txt

@<"text.txt" (Set/P "Var="&Call Echo(%%Var:*: =%%)>"textf.txt"

【讨论】:

【参考方案2】:

如果您只是想获取Random Characters 作为字符串,这可以在for 循环中轻松完成。我们使用type text.txt 将文件逐行显示到一个变量中。从那里我们使用find /I "Random Characters:" 查找包含Random Characters: 的行。最后,我们可以在for 循环中使用"tokens=1-2,3* delims= " 来提取数字。

Rem | Get .txt To String
FOR /F "tokens=*" %%A IN ('type text.txt') DO (

    Rem | Find The First "Random Characters" Line
    for /f "tokens=1-2,3* delims= " %%B in ('echo %%A^| find /I "Random Characters:"') do (

        Rem | Set String
        Set "String=%%D"

        Rem | Break Loop
        Goto Finished

    )
)

:Finished

Echo %String%

如果您要更新文本文件并删除 Random Characters:,那么我们可以添加替换功能来编辑文本文件。

@ECHO OFF
@setlocal EnableDelayedExpansion

Rem | Configuration
Set "FileLocation=text.txt"

Rem | Get .txt To String
FOR /F "tokens=*" %%A IN ('type !FileLocation!') DO (

    Rem | Find The First "Random Characters" Line
    for /f "tokens=1-2,3* delims= " %%B in ('echo %%A^| find /I "Random Characters:"') do (

        Rem | Set SearchText & ReplaceText
        Set "SearchText=%%A"
        Set "ReplaceText=%%D"

        Rem | Break Loop
        Goto EditString

    )
)
goto :EOF

:EditString

REM | Make sure we only edit the Random Characters: line.
FOR /F "delims=" %%n IN ('findstr /n "^" %FileLocation%') DO (
    SET line=%%n
    SET Modified=!line:%SearchText%=%ReplaceText%!
    SET Modified=!Modified:*:=!

    REM | Output the entire edited INI to a temporary file.
    >> %FileLocation%.TEMP ECHO(!Modified!
)

Rem | Delete Original File, Restore New
DEL %FileLocation%
REN %FileLocation%.TEMP %FileLocation%

Goto :EOF

输入原始文本文件:

Random Characters: 93h4-283ed-93j2-je82
Random Characters: 93i4-283ed-93j2-je82
Hello My Name John
Random Characters: 93j4-283ed-93j2-je82
Nice To Meet You
Random Characters: 93k4-283ed-93j2-je82
How Is Your Day
Random Characters: 93l4-283ed-93j2-je82

输出原始文本文件:

93h4-283ed-93j2-je82
Random Characters: 93i4-283ed-93j2-je82
Hello My Name John
Random Characters: 93j4-283ed-93j2-je82
Nice To Meet You
Random Characters: 93k4-283ed-93j2-je82
How Is Your Day
Random Characters: 93l4-283ed-93j2-je82

请记住,我为脚本的每个进程都留下了Rem cmets。有关命令的更多帮助,请在命令提示符中键入以下内容:

set /? for /? if /? goto /? 例外

【讨论】:

以上是关于如何从一行中删除某些单词,但将其余部分放入带有批处理的字符串/变量中?的主要内容,如果未能解决你的问题,请参考以下文章

如何从字符串中删除所有非希伯来字符并将单词放入数组中?

无法提取所需的文本部分并从某些元素中删除其余部分

如何使用命令提示符或批处理文件从字符串中删除某些字符?

使用批处理删除文本文件中特定单词之前的文本

从批处理文件中的变量中删除双引号会导致 CMD 环境出现问题

如何从文本文件中删除重复并包含某些单词的行?