是的,但它是不是很漂亮。这个明显的候选者将会使用正则表达式,这些正则表达式只能在批处理文件中进行匹配(然后才非常有限)。如果你使用PowerShell,那么它只是
Get-Content foo.txt | ForEach-Object {
[Regex]::Match($_, 'NUM="(\d+)"').Groups[1].Value
}
但遗憾的是,在批处理文件中,这有点复杂。
但是,您可以使用for /f
解析文件,然后检查令牌。尽管如此,没有简单的方法可以通过令牌解析一个行标记。令牌化后停止31个令牌(如果我没有记错的话)。在任何情况下,下面的工作:
@echo off
for /f "delims=" %%f in (foo.txt) do call :parse "%%f"
goto :eof
:parse
setlocal enabledelayedexpansion
set i=0
:parseImpl
set /a i+=1
(
for /f "tokens=%i% delims= " %%l in (%1) do (
rem Jump out if no more tokens are there
if "%%l"=="" goto :eof
rem Remember the token
set T=%%l
if "!T:~0,4!"=="NUM=" (
set N=!T:~4!
rem add redirection here if needed
echo !N:"=!
)
)
) || goto :eof
rem This above will cause the loop to stop once no more tokens are there.
rem The for loop will return a non-zero exit code then.
goto parseImpl
这不是太漂亮,但相当简单。由于读取文件时,我只能使用每行一次,我将工作委派给一个子程序,该子程序会根据需要频繁执行。为此,使用变量i
来跟踪当前令牌编号。然后使用另一个for
循环从该字符串提取所请求的令牌。如果令牌以NUM=
开头,则假定它是您想要的数字。它被清理并打印。
如果要直接它们放入一个文件,然后将相应线路更改为
>out.txt echo !N:"=!
的代码也可以发现in my SVN。
什么问题? yopu想从文件中找到什么?文本(根据您的主题建议)?或数字作为你的问题的主体建议。你能给出一些与你的示例输入相匹配的示例输出吗? – 2010-12-06 15:35:43
感谢Paul.I需要提取数字并将其写入新文件。 – 2010-12-06 15:37:40
输出文件应该包含“100”,“102”,“103” – 2010-12-06 15:43:51