如何基于批处理文件中的if语句设置变量值

时间:2019-05-29 23:39:36

标签: batch-file

我正在尝试基于批处理文件中的if-else语句为变量分配值。我正在文本文件中搜索字符串,如果找到了字符串,则需要为该变量分配一个特定的值。

我使用if-else语句分配值,但是在退出if-else语句后,当我尝试回显变量时,我将值设为0

@echo off

set "logfile=results.txt"
find /n /i "Orientation      : 0" "%logfile%" >nul
if %errorlevel% equ 0 (
    set org = "landscape"

) else (
    set org = "portrait"

)

echo %org%

此输出应为“ landscape”,我已验证该字符串确实存在于文件中。出于某种原因,我得到0作为输出。

2 个答案:

答案 0 :(得分:2)

作为已提供答案的补充,突出显示您在 = 字符两边使用了空格。这表示您正在设置,例如:
o r g = p o r t < /kbd>rait"
除非您删除这些空格,否则需要 Echo
o r g

以查看您要设置的值(其中还包括双引号)

我还建议您使用以下语法:

@Echo Off
Set "logfile=results.txt"
Set "org="
Find /I "Orientation      : 0" <"%logfile%" >Nul && (
    Set "org=landscape"
) || (
    Set "org=portrait"
)
Echo %org%

或者,使用FindStr可以让您对空格的存在或数量进行一些调整,例如以下内容仍将匹配:
Orientation:0

Orientation : 0

@Echo Off
Set "logfile=results.txt"
Set "org="
FindStr /IRC:"Orientation[\ :]*0" "%logfile%" >Nul && (
    Set "org=landscape"
) || (
    Set "org=portrait"
)
Echo %org%

简单地说,条件运算符 && || 有效表示上一条命令是否成功以及是否先前的命令分别失败了。

答案 1 :(得分:0)

删除等号周围的空格:

set org="landscape"
set org="portrait"