批量从txt中提取一行

时间:2015-11-11 20:46:18

标签: string batch-file find compare extract

我有一个包含以下内容的txt文件:

a random word another random word even more random words this 10.000 times

我想将用户输入set /p String=String:与txt文件中的每个单词进行比较。 我的想法如下:我使用find /n /v "" Txtfile.txt>txt2file.txt创建一个txt文件,其中包含[line] Afront的每个单词并手动删除

---------- txt2file.txt

find命令的结果。我现在有以下txt文件:

[1]a random word

[2]another random word

[3]even more random words

这10.000次

要提取一行,请说行[2]我此时使用find "[%A%]" txtfile2.txt且A为2。

cmd返回:

---------- txt2file.txt [2]another random word

现在,如何确保删除输入和---------- txt2file.txt,并保存[2]another random word

如果我能解决这个问题,我有两个想法,比较复杂的和丑的。

复杂修复:

setlocal enableDelayedExpansion for /F %%F in ("!string!") do ( set "string=!string:[%A%]"=!" with A=2

) echo %string% pause根据我的逻辑,这应该用""替换字符串的[2]部分。 (虚无)并制作字符串a random word

问题是: 它基本上什么都不做,它返回[2]another random word

简单的想法(调试版):

set "StringCompare=[2]a random word"

set "String=a random word"

set "A=2"

set StringCompare=[%A%]%String%

if "%StringCompare%==[%A%]%String%" echo Success!

pause

不起作用,它在if声明中崩溃,我无法找出原因。

如果你能提出任何解决方案,我会感到高兴。一个更好的版本也会很好。

我知道有很多重复,但所有的答案都是vbs,我还没有学到,我不喜欢使用我不理解的代码的想法。 如果你有一个vbs的解决方案(首先尝试批量:),请解释它让我快乐。

1 个答案:

答案 0 :(得分:0)

使用FIND命令时有两个选项。

type txtfile2.txt |find "[%A%]"

OR

find "[%A%]" <txtfile2.txt

这将获得在输出时找到的文件名。