我有一个文件,其内容如下,该行是连续的,
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 =“。
答案 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
。现在也应该清楚为什么循环变量区分大小写,而环境变量不区分大小写。如果指定的循环变量为B
或A
,那么下一个循环变量将有所不同。
在每次循环运行时,首先进行不区分大小写的字符串比较,以检查版本字符串是否在当前行的开头。如果第一个条件为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
命令选择所需的行,该行可以位于文件中的任意位置 ...