如何检查CMD / BAT命令行参数是否与特定字匹配?

时间:2012-08-06 06:36:31

标签: batch-file cmd dos

大家好,大家好。我打算编写一个批处理(umake.bat)文件来执行以下操作:

检查其中一个bat参数中是否出现-f,以便我可以在.bat中执行不同的操作。

案例1:

用户来电

umake 

在umake.bat内部,我将执行

make -f Makefile.umk

案例2:

用户来电

umake debug=1 var="big cat"

在umake.bat内部,我将执行

make debug=1 var="big cat" -f Makefile.umk

案例3:

用户来电

umake -f special.mk debug=1

在umake.bat内部,我将执行

make -f special.mk debug=1

案例4:

用户来电

umake debug=1 -f

在umake.bat内部,我将执行

make debug=1 -f

在案例4中,make(GNU make)将不会成功,因为在-f之后缺少文件名。为简单起见,我不必关心这个,因为它是用户的错,GNU make会报告这个问题。

要点:

  • 如果用户在命令参数中提供-f xxx,我会将这些参数传递给make
  • 如果用户未提供-f xxx,我会使用所有用户的参数调用make,并将-f Makefile.umk附加为make的额外参数。

谢谢。

1 个答案:

答案 0 :(得分:0)

我似乎找到了解决方案,虽然代码很冗长。

@echo off

set _F_MAKEFILE=-f Makefile.umk

:CHECK_PARAM_AGAIN
if "%~1" == "" (
  goto CHECK_PARAM_DONE
) else (
  if "%~1" == "-f" (
    set _F_MAKEFILE=
    goto CHECK_PARAM_DONE
  )
  rem echo @@@%1
  shift
)
goto CHECK_PARAM_AGAIN

:CHECK_PARAM_DONE

@echo on
make %* %_F_MAKEFILE%

注意:

  • 使用%~1是必须的。因为:如果%1的值为"big cat",则%~1会将其设为big cat,以便我们可以使用引号覆盖%~1