【问题标题】:BATCH IF condition for specific format特定格式的 BATCH IF 条件
【发布时间】:2014-12-07 09:02:49
【问题描述】:

当第二个参数是用点分隔的 3 个数字时,如何形成 IF 条件为真。 我试过这个(应该适用于任何字符,而不仅仅是数字)但不起作用。

IF /I "%2"=="*.*.*" SET VAR=%2

我该怎么做?

【问题讨论】:

  • if 不支持占位符。它按字面意思搜索“star-dot-star-dot-star”。你是 0 到 9 之间的数字还是 10 或更大?
  • 只有 [0-9] 一个字符,我认为这可以通过 FOR 循环来完成,但我不知道如何。

标签: windows batch-file if-statement command-line wildcard


【解决方案1】:
@ECHO OFF
SETLOCAL
SET "leadnum=123456789"
SET "anynum=%leadnum%0"
FOR %%i IN (
 1.2.3
 123.456.789
 012.345.678
 12.3
 12
 12a.345.678
 12.34.56.78
 12.34.777f
 12.34.
 12.34.56.
 ) DO (
 ECHO %%i|FINDSTR /b /e "[%leadnum%][%anynum%]*\.[%leadnum%][%anynum%]*\.[%leadnum%][%anynum%]*" >NUL
 IF ERRORLEVEL 1 (ECHO %%i is NOT of format) ELSE (ECHO %%i is IN format)
)

GOTO :EOF

这是一个演示。你没有说什么是数字,所以我随意决定将数字定义为以数字字符('0'除外)开头并后跟任意数量的数字字符的字符串。

【讨论】:

    【解决方案2】:

    IF 不支持占位符,所以你必须模仿它们

    echo %2||findstr /R "^[0-9]\.[0-9]\.[0-9]$" && (set "var=%2") || (echo no match)
    

    ^从字符串的第一个位置开始

    \. 一个点。 (. 只能是“任何字符”)

    [0-9] 任意数字(如果需要,您也可以使用 [1-9] 或示例)

    $ 字符串结束。

    && 如果上一个命令 (findstr) 成功则...

    || 如果上一个命令 (findstr) 失败则...

    【讨论】:

      【解决方案3】:
      set "value=%2"  & setlocal enabledelayedexpansion  
      for %%a in (1 2 3 4 5 6 7 8 9) do set "value=!value:%%a=0!"
      endlocal & if "%value%"=="0.0.0" ( set "var=%2" ) else ( set "var=" )
      
      echo(%var%
      

      这只是用 0 替换所有数字并测试有效的结束值

      【讨论】:

        猜你喜欢
        • 2018-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 2019-04-29
        • 2013-12-11
        相关资源
        最近更新 更多