**批处理文件 **我正在编写接收命令行参数的批处理文件,如果参数匹配,则执行一些操作。但是,当使用新参数再次运行批处理文件时,该文件仍使用旧参数运行。
-
首次运行 : 文件.bat -名称 你好 -W 400 -R 320
-
第二次运行:文件.bat -名称 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 语句提供了其他相应的标签,并为用户传递给它们的值设置了不同的变量(如果有)。有时,当我尝试打印出某个变量的值时,我也会得到回声关闭。如上所述,我使用的所有变量都在文件开头清除
这里有几点。
"我还在文件的开头和结尾使用 setlocal 和 endlocal。
"如上所述,我使用的所有变量都在文件的开头被清除。"
Setlocal 命令不会清除变量,它会保留当前变量免受后验修改。这意味着,如果在以前执行批处理文件时,甚至通过键入的 SET 命令,定义了文件名变量,则其值将一直保留,直到删除或修改为止。
"好的!",你说,"文件名变量在批处理文件第二次运行时被修改,对吧?"
嗯,不...以下行:
set filename =%1
不修改"文件名"变量,而是修改"文件名"(文件名和空格)。试试这个:
set filename=No space
echo %filename%
set filename =Bad name with trailing space
echo %filename %
echo %filename%
您必须仔细检查程序以避免此类错误。