Batch file 在批处理文件中更新命令行参数

Batch file 在批处理文件中更新命令行参数,batch-file,Batch File,**批处理文件**我正在编写批处理文件,该文件接受命令行参数,如果参数匹配,则执行一些操作。但是,当使用新参数再次运行批处理文件时,该文件仍然使用旧参数运行 第一次运行:file.bat-name hello-w 400-r 320 第二次运行:file.bat-name hello-w400 当我对文件进行第二次运行时,它仍然执行第一次运行,我的意思是说它仍然考虑第一次运行的参数。有人知道为什么会这样吗 提前谢谢 很抱歉,没有发布批处理文件代码。 下面提到的是代码 set filename=

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

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

  • 第二次运行:file.bat-name hello-w400

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

    提前谢谢

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

    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
    )。不过,如果您发布批处理文件本身,这将是一个更好的猜测。