0

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

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

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

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

提前致谢。

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

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

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

4

1 回答 1

1

这里有几点。

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

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

Setlocal 命令不会清除变量,它会保留当前变量以防止后期修改。这意味着,如果在之前执行批处理文件时,或者甚至通过键入的 SET 命令,定义了文件名变量,它的值将一直保留,直到它被删除或修改。

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

好吧,不......以下行:

set filename =%1

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

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

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

于 2012-04-27T00:55:22.313 回答