星号批量扩展

时间:2018-07-20 19:59:17

标签: batch-file if-statement parameters

我正在编写一个批处理脚本,用于检查传入的参数(对于git分支)是否与特定类型的分支匹配。这是我的代码:

@echo off
if %Branch% == "refs/topics/*" (
    echo yes
)
if not %Branch% == "refs/topics/*" (
     echo no
)

这只是在if / else条件分支中应该执行的操作的简单示例,但是我面临的问题是当我传递应该进入“ yes”分支的参数时,它仍然进入“否”分支。这是我要传递的参数:refs / topics / tester

从理论上讲,它应与带有星号扩展名的refs / topics /相同。我在这里做错什么,如何解决它才能正确检查?

2 个答案:

答案 0 :(得分:2)

IF在批处理文件中的比较是文字比较。左边的所有字符都必须与右边的所有字符匹配。星号不能用作通配符。

假设您实际上在批处理文件中的某个位置将一个传递的参数分配给了变量分支,那么代码应该看起来像这样。

@echo off
set "Branch=%~1"
if /I "%Branch%"=="refs/topics/" (
    echo yes
) else (
     echo no
)

但是也许您正在查看输入的前12个字符是否等于您的字符串。

@echo off
set "Branch=%~1"
if /I "%Branch:~0,12%"=="refs/topics/" (
    echo yes
) else (
     echo no
)

答案 1 :(得分:1)

考虑到*所代表的部分不包含/\的情况,这可能会起作用(未测试):

set "Branch=%~1"
for %%I in ("\%Branch:/=\%") do (
    if /I "%%~pI"=="\refs\topics\" (
        echo yes
    ) else (
        echo no
    )
)