如何使用批处理脚本从文件中获取特定单词?

时间:2018-08-26 14:24:45

标签: batch-file for-loop

我有一个文件,其内容如下,该行是连续的,

VERSION=7.0.2
BUILD=03bbabbd5c0f
PRODUCT=splunk
PLATFORM=Windows-AMD64

由此,我只需要VERSION。我尝试使用以下命令:

FOR /F "usebackq tokens=1 eol=P" %G IN ("C:\ProgramFiles\SplunkUniversalForwarder\etc\splunk.version") DO echo %G

涉及eol=P是因为它没有带出最后两行,但是我也不希望第二行。有人可以帮忙吗?实际上,主要目标是仅获取版本号,甚至不获取“ VERSION =“。

3 个答案:

答案 0 :(得分:0)

在我的评论中。

在命令提示符处:

For /F "UseBackQ EOL=P Tokens=1* Delims==" %A In ("%ProgramFiles%\SplunkUniversalForwarder\etc\splunk.version") Do @Echo %B

作为批处理文件:

For /F "UseBackQ EOL=P Tokens=1* Delims==" %%A In ("%ProgramFiles%\SplunkUniversalForwarder\etc\splunk.version") Do @Echo %%B

答案 1 :(得分:0)

在批处理文件中,使用以下代码:

@echo off
for /F "usebackq tokens=1* delims==" %%A in ("C:\Program Files\SplunkUniversalForwarder\etc\splunk.version") do if /I "%%~A" == "VERSION" if not "%%~B" == "" set "Version=%%~B" & goto HaveVersion
echo Error: Could not find VERSION= with a version string in file:
echo        C:\Program Files\SplunkUniversalForwarder\etc\splunk.version
pause
goto :EOF

:HaveVersion
echo Version is: %Version%
pause

请注意Program Files中的空格。

带有已使用选项/F的命令 FOR 逐行读取指定的文件,跳过空行和以;开头的行,这是{{1 }}(行尾)选项。

必须使用选项eol才能获得包含在双引号中的完整合格文件名,该文件名被解释为文件名而不是要处理的字符串。由于空格字符,必须在完整的合格文件名两边加上双引号usebackq

"重新定义了分隔符,用于将行从默认空间和水平制表符拆分为等号的子字符串(标记)。因此, FOR 现在仅使用delims==作为字符串的分隔符来分割行。

=表示应将第一个等号分隔的子字符串分配给循环变量tokens=1*。并且应该分配第一个等号之后的其余行,而不必根据ASCII table进一步拆分到下一个循环变量,在本例中为下一个循环变量A。现在也应该清楚为什么循环变量区分大小写,而环境变量不区分大小写。如果指定的循环变量为BA,那么下一个循环变量将有所不同。

在每次循环运行时,首先进行不区分大小写的字符串比较,以检查版本字符串是否在当前行的开头。如果第一个条件为true,则使用第二个 IF 条件来验证文件中等号的确存在版本字符串。如果第二个条件也成立,则将版本字符串分配给环境变量a,并通过继续批处理并跳至标签Version下面的行来退出循环。因此, FOR 不会进一步处理文件中的其他行。

通常,最好使用HaveVersion引用环境变量ProgramFiles,而不是将%ProgramFiles%分别用作Windows x64上32位操作系统的64位应用程序的标准程序文件目录Windows x86上的位应用程序可以位于任何具有任何文件夹名称的驱动器上。但是,如果批处理文件在32位Windows,64位环境中的64位Windows和32位环境中的64位Windows上都可以工作,则必须考虑Windows WOW64 Implementation Details。另请参阅有关Windows Environment Variables的维基百科文章。

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • C:\Program Files
  • echo /?
  • for /?
  • goto /?
  • if /?
  • pause /?

有关运算符set /?的说明,另请参见Single line with multiple commands using Windows batch file

答案 2 :(得分:0)

更简单:

FOR /F "tokens=2 delims==" %G IN ('findstr "VERSION" "C:\ProgramFiles\SplunkUniversalForwarder\etc\splunk.version"') DO echo %G

使用findstr命令选择所需的行,该行可以位于文件中的任意位置 ...

相关问题