BATCH IF特定格式的条件

时间:2014-12-07 09:02:50

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

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

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

我该怎么做?

3 个答案:

答案 0 :(得分:0)

@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')之后是任意数字的数字字符。

答案 1 :(得分:0)

IF不支持占位符,因此您必须模仿它们

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

^从字符串

的第一个位置开始

\.一个点。 (.只会是"任何字符")

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

$字符串结束。

&&如果上一个命令(findstr)成功,那么......

||如果上一个命令(findstr)失败,那么......

答案 2 :(得分:0)

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替换所有数字并测试有效的结束值