Batch file 在批处理文件中更新命令行参数
**批处理文件**我正在编写批处理文件,该文件接受命令行参数,如果参数匹配,则执行一些操作。但是,当使用新参数再次运行批处理文件时,该文件仍然使用旧参数运行Batch file 在批处理文件中更新命令行参数,batch-file,Batch File,**批处理文件**我正在编写批处理文件,该文件接受命令行参数,如果参数匹配,则执行一些操作。但是,当使用新参数再次运行批处理文件时,该文件仍然使用旧参数运行 第一次运行:file.bat-name hello-w 400-r 320 第二次运行:file.bat-name hello-w400 当我对文件进行第二次运行时,它仍然执行第一次运行,我的意思是说它仍然考虑第一次运行的参数。有人知道为什么会这样吗 提前谢谢 很抱歉,没有发布批处理文件代码。 下面提到的是代码 set filename=
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语句设置了其他相应的标签,并将不同的变量设置为用户传递给它们的值(如果有的话)。
有时,当我试图打印某个变量的值时,我也会发现echo关闭。
如上所述,我使用的所有变量都在文件开头清除。这里有几点 “我还在文件的开头和结尾使用setlocal和endlocal。” “我使用的所有变量都会在文件开头清除,如上所述。” Setlocal命令不会清除变量,它会保留当前变量以防修改。这意味着,如果在批处理文件的上一次执行中,甚至通过键入的SET命令,定义了filename变量,则该值将保留,直到删除或修改为止 “好吧!”您说,“批处理文件第二次运行时会修改filename变量,对吗?” 嗯,不。。。以下一行:
set filename =%1
不修改“filename”变量,而是修改“filename”(文件名和空格)。试试这个:
set filename=No space
echo %filename%
set filename =Bad name with trailing space
echo %filename %
echo %filename%
您必须仔细检查程序以避免此类错误。欢迎使用StackOverflow。如果你不显示批处理文件,你怎么能指望我们知道它出了什么问题?从这里我们看不到你的屏幕,也看不到你的心思;我们只知道你在问题中提供了什么。如果你不告诉我们,我们帮不了你。请编辑您的问题并提供批处理内容,否则我怀疑这个问题会很快以“不是真正的问题”结束。你可能想读这本书;里面有关于如何提出更好的问题的信息,以提高你得到答案的机会。谢谢。:)顺便说一句,第一次运行设置了在运行结束时未清除的环境变量,因此第二次运行继承了未更改的环境变量(在您给出的示例中是
-r 300
)。不过,如果您发布批处理文件本身,这将是一个更好的猜测。