如何从一行中删除某些单词,但将其余部分放入带有批处理的字符串/变量中?
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 /?
例外
【讨论】:
以上是关于如何从一行中删除某些单词,但将其余部分放入带有批处理的字符串/变量中?的主要内容,如果未能解决你的问题,请参考以下文章