从文本文件中解析信息的Windows命令行

5

我有一个文本文件,其中包含了很多信息,其中有行以“Password:”开头。我想要做的是运行一个命令行命令(如果可能的话)来解析.txt文件中跟随“Password:”的所有术语,并将它们放入一个新的文本文件中,列出所有密码。在条目中,“Password:”和实际密码之间的空格数不同。

到目前为止,我已经使用过:

FINDSTR /L "Password: " input_file.txt > output_file.txt

这个方法很好,但是也会提取出“密码:”这个词。根据我的调研,我不认为命令行有内置的功能可以从 .txt 文件中删除字符串。我的想法是在运行上述命令后,再运行类似以下的命令:

FINDSTR /L "Password: " input_file.txt > output_file.txt & DELSTR "Password: " output_file.txt > final_file.txt & DEL output_file.txt

显然,我发明了“DELSTR”,但是正如所说的,我需要在那里添加一些内容,以从每行中删除字符串“Password:”。

有什么建议吗?谢谢。


是的,cmd.exe内置了字符串处理功能:http://superuser.com/questions/228794/how-to-extract-part-of-a-string-in-windows-batch-file - Marc B
使用PowerShell而不是cmd.exe可以让你的工作更轻松。 - Bill_Stewart
2个回答

6

实际上,有一些(非常有限的)用于字符串操作的内置函数。有关详细信息,请参见set /?
无需使用临时文件,您可以直接将字符串解析为变量:

(如果有多个密码,则编辑代码以打印所有密码)

setlocal enabledelayedexpansion
for /f "delims=" %%a in ('findstr /b /c:"Password: " input_file.txt') do (
  set pwd=%%a
  set "pwd=!pwd:Password: =!"
  echo !pwd!>>final_file.txt 
)

非常感谢你。然而,它似乎只将最后一个密码条目写入 final_file.txt 文件中,而不是所有密码。有什么建议吗? - thefragileomen
这段代码存在一个问题:带有感叹号的密码无法正确处理。解决方法是在第一行使用 setlocal EnableExtensions DisableDelayedExpansion,在两个 set 命令之间插入 setlocal EnableDelayedExpansion,并在闭合圆括号所在行上方插入 endlocal - Mofi

0

Stephan的代码之后,使用For /f循环可以在不进行额外字符串操作的情况下获得结果。此外,它将删除任何仅为空格的结果,导致Echo响应状态行,例如“Echo is OFF”。使用Echo:可以防止“off”和“on”(虽然相对较弱)被视为Echo参数。

Setlocal ENABLEDELAYEDEXPANSION
For /f "tokens=1* delims=: " %%a In ('Findstr /b /c:"Password: " input_file.txt') Do (
  Set pwd=%%b
  Echo:!pwd!>>final_file.txt 
)

1
这段代码存在一个问题:带有感叹号的密码无法正确处理。解决方法是在第一行使用“setlocal EnableExtensions DisableDelayedExpansion”,在命令行中使用echo命令的上方插入“setlocal EnableDelayedExpansion”,并在下方插入“endlocal”。 - Mofi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接