例如:Set var=findstr "name" temp.txt [temp.txt consist multiple lines , out of which one line says "my name is ABC"]
稍后找到该行的最后一个单词,即ABC
答案 0 :(得分:0)
要捕获命令的输出,请使用for /f
循环。有关详细信息,请参阅help for
。
要将%var%
的值设置为findstr
的输出,请执行以下操作:
for /f "delims=" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%I"
然后,如果您想要该行的最后一个单词,则可以使用基本for
循环来遍历%var%
的每个单词。
for %%I in (%var%) do set "lastword=%%I"
set "var=%lastword%"
或者,如果您知道包含“name”的行总是4个令牌长(如“我的名字是等等”),您可以简单地捕获findstr
输出的第四个令牌此
for /f "tokens=4" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%I"
就是这样。 %var%
将包含findstr
匹配的第四个单词。
如果您知道该行将始终以“我的名字是”开头,但您想要姓名的可能性,或许多名称如“John Jacob Jingleheimer-Schmidt”,您可以使用{{1}捕捉你想要的东西,类似于练习2。
tokens
请注意,这次我抓取了for /f "tokens=3*" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%J"
而不是%%J
。这是因为%%I
将是令牌3(第三个单词),而%%I
就是其后的所有内容(%%J
中的通配符)。
或者,如果名称可能是名字和姓氏,但您知道它的前面是“我的名字是”,您可以通过variable substring substitution删除“我的名字”部分。< / p>
tokens=3*
将从for /f "delims=" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%I"
set "var=%var:My name is =%"
的值中删除“我的名字是”,留下“约翰史密斯”。
如果你不能指望包含“name”的行是相同数量的单词(例如,“你好!我的名字是”或“你好!我的名字是”,你可以使用{{3使用通配符去除变量内容。无论名称是一个字还是更多,这都应该有效,无论“名称”之前的内容是否有所不同。
%var%
答案 1 :(得分:0)
与批处理中的其他编程语言一样,您可以将变量存储在内存中以供进一步使用:
@echo off&setlocal
set "file=temp.txt"
set "search=name"
:: clear the local environment
for /f "delims==" %%i in ('set $ 2^>nul') do set "%%i="
:: find the lines containing %search%
for /f "delims=" %%i in ('findstr "%search%" "%file%"') do set "$%%i=%%i"
:: show the line variables
set $