0

例如:Set var=findstr "name" temp.txt [temp.txt consist multiple lines , out of which one line says "my name is ABC"]稍后找到该行的最后一个单词,即 ABC

4

2 回答 2

0

要捕获命令的输出,请使用for /f循环。有关help for更多信息,请参阅。

练习 1

要将 的值设置%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%"

练习 2

或者,如果您知道包含“name”的行将始终是 4 个标记(如“My name is blah”),您可以简单地捕获输出的第四个标记,findstr如下所示。

for /f "tokens=4" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%I"

就是这样。 %var%将包含匹配的行的第四个单词findstr


练习 3

如果您知道该行将始终以“我的名字是”开头,但您想要名字和姓氏的可能性,或者像“John Jacob Jingleheimer-Schmidt”这样的很多名字,您可以使用tokens来捕获您想要的类似于练习 2。

for /f "tokens=3*" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%J"

请注意,我捕获%%J而不是%%I这次。那是因为%%I将是标记 3(第三个单词),而%%J之后的所有内容(通配符tokens=3*)。


练习 4

或者,如果名称可能是名字和姓氏,但您知道它将以“我的名字是”开头,您可以通过变量子字符串替换删除“我的名字是”部分。

for /f "delims=" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%I"
set "var=%var:My name is =%"

这将从 的值中删除“My Name is” %var%,留下“John Smith”。


练习 5

如果您不能指望包含“name”的行是相同数量的单词(例如,“Hi there!My name is”或“Hello!My name is”,您可以使用带通配符的变量子字符串替换去除可变内容。无论名称是一个词还是多个单词,并且无论“名称是”之前的内容是否变化,这都应该起作用。

for /f "delims=" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%I"
set "var=%var:*name is =%"
于 2013-04-08T13:12:29.657 回答
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 $
于 2013-04-08T13:56:38.903 回答