【问题标题】:If a value in a text file less than X do the following如果文本文件中的值小于 X,请执行以下操作
【发布时间】:2022-01-03 20:35:51
【问题描述】:

有一个名为“Settings.txt”的文件,该文件包含很多行,包括以下变量行:

X 100

这一行的数字是可变部分,“X”是固定文本。

我需要检查该数字是否为 (小于 100) OR (等于或大于 100) 然后基于结果 > 转到 A 或 B。

脚本可能是这样的:

IF >> "X 100" in "D:\Settings.txt" GEQ 100 goto A else goto B
:A
@echo the value is equal or greater than 100
pause & goto continue
:B
@echo the value is less than 100
pause
:continue
#the rest of the script

【问题讨论】:

    标签: windows batch-file cmd


    【解决方案1】:

    需要一种从Settings.txt 文件中读取的机制来获取号码。

    @ECHO OFF
    FOR /F "tokens=1,2" %%A IN ('findstr.exe /B "X [:digit:]+" "Settings.txt"') DO (SET "NUM=%%~B")
    ECHO NUM is set to %NUM%
    IF  %NUM% GEQ 100 (GOTO ALABEL) ELSE (GOTO BLABEL)
    :ALABEL
        ECHO Do greater than or equal stuff
        GOTO TheEnd
    :BLABEL
        ECHO Do less than stuff
        GOTO TheEnd
    :TheEnd
    EXIT /B 0
    

    【讨论】:

    • findstr 不支持\d等正则表达式。
    • @T3RR0R,它可能不“支持”它,但它似乎找到了正确的字符串。我将其更改为findstr.exe /? 信息中记录的内容。它也有效。
    • 它的工作是偶然的,因为您搜索X 和/或文字字符串\d+。正确的形式(如果正则表达式有效)是findstr /BRC:"X \d+
    • @lit 阅读我在How to use OR operator with command FINDSTR from a Windows command prompt? 上的回答可能会对您有所帮助。FINDSTR 的正则表达式语法非常特殊。建议忘记 Perl 兼容的正则表达式中已知的所有内容。即使[0-9] 不仅匹配0123456789,而且还匹配¹²³,这是任何熟悉Perl 正则表达式语法的人都不会想到的。 (PS:解决方案是/B /R /C:"X [0123456789][0123456789]*"。) PPS:我还没有投反对票。
    • @KJ,好的,我删除了路径,直到找出它不起作用的原因。
    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2018-09-19
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多