更新批处理文件中的命令行参数

时间:2012-04-26 19:12:13

标签: batch-file

**批处理文件**我正在编写批处理文件,它接受命令行参数并在参数匹配时执行一些操作。但是当使用新参数再次运行批处理文件时,该文件仍然使用旧参数运行。

  1. 首次运行:file.bat -name hello -w 400 -r 320

  2. 第二次运行:file.bat -name hello -w 400。

  3. 当我第二次运行文件时,它仍然执行第一次运行,我的意思是它仍然会考虑第一次运行的参数。有人知道为什么会这样吗?

    提前致谢。

    很抱歉没有发布批处理文件代码。 下面提到的是代码。

    set filename= 
    set rate=
    set hidden=
    set rate=
    :recheck 
    if  "%1"=="-help"  goto :help
    if  "%1"=="-name"  goto :filename
    if  "%1"=="-h"     goto :hidden 
    if  "%1"=="-w"     goto :weight 
    if  "%1"=="-r"     goto :rate 
    if  "%~1"==""      goto :endofcommandline
    :filename 
    shift 
    set filename =%1
    shift   
    goto :recheck
    

    对于文件的其他部分,我使用变量“filename”来做其他事情。我还在文件的开头和结尾使用了setlocal和endlocal。 我为每个if语句都有其他相应的标签,并为用户传递给它们的值设置不同的变量。 有时,当我尝试打印出某些变量的值时,我也会得到回声。 我使用的所有变量都在文件的开头清除,如上所述。

1 个答案:

答案 0 :(得分:1)

这里有几点。

  

“我还在文件的开头和结尾使用了setlocal和endlocal。”

     

“我使用的所有变量都在文件的开头清除,如上所述。”

Setlocal命令不清除变量,保留来自后验修改的当前变量。这意味着如果在先前执行批处理文件,或者甚至通过键入的SET命令,定义了文件名变量,则该值将保留,直到删除或修改为止。

“好的!”,你说,“文件名变量在第二次批处理文件运行时被修改,对吧?”

嗯,不...以下一行:

set filename =%1

不修改“filename”变量,而是修改“filename”(文件名和空格)。试试这个:

set filename=No space
echo %filename%
set filename =Bad name with trailing space
echo %filename %
echo %filename%

您必须仔细检查您的程序以避免此类错误。