Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 具有相同变量的多个批处理文件_Variables_Batch File_Cmd_Call - Fatal编程技术网

Variables 具有相同变量的多个批处理文件

Variables 具有相同变量的多个批处理文件,variables,batch-file,cmd,call,Variables,Batch File,Cmd,Call,我想知道在两个不同的批处理程序中是否可能有相同的变量 :home Set /p Name=What is your Name? Set /p Com=What Command do you wish to use? If %Com% == #HELP goto msgbox (MORE IF's ARE USED) goto msgbox :msgbox cls start msgbox.cmd Echo We

我想知道在两个不同的批处理程序中是否可能有相同的变量

    :home
    Set /p Name=What is your Name? 
    Set /p Com=What Command do you wish to use?
    If %Com% == #HELP goto msgbox
    (MORE IF's ARE USED)

    goto msgbox

    :msgbox
    cls
    start msgbox.cmd
    Echo Welcome to the MSGBOX PROGRAM %Name%
    %Com% Code was typed, here is the Help file
    goto Help

    :Help
    cls
    (display's the help for program)
    Set /p return=Would you like to return?
    If %return%==Y goto home
    If %return%==N goto exit
    (Set errorlevel==1 if no selection)

    :exit
    cls
    Echo press Enter to exit program
    pause >nul

1)如果从第一个bat文件调用第二个bat文件,则第二个bat文件将继承所有变量

2)您还可以定义环境变量。您可以使用

虽然它写在注册表中,但您不能直接使用它-它将在下一个cmd会话中可访问。因此,您需要在脚本中使用临时变量:

Set /p Com=What Command do you wish to use?
rem making variable accessible for the next run or for another batch
setx Com %com%
你可以覆盖它的值为每一个cmd会话或脚本你想要设置。之后,它将再次使用注册表值

3)您也可以使用临时文件,但这需要在下一批中读取:

Set /p Com=What Command do you wish to use?
echo %com%>c:\command.file
在下一个脚本中,您需要使用:

for /f "useback tokens=* delims=" %%# in ("c:\command.file") do set "com=%%#"

您希望在两个脚本中使用哪个变量?它将是%Com%变量。注意它是如何作为第二个set/p命令出现在主程序中的。然后它转到msgbox.cmd窗口,在该窗口中存储变量%Com%,并从主程序中使用。注意:请记住
CALL
将保持相同的cmd窗口并允许使用变量<代码>开始将打开一个新的CMD窗口(如果没有/B标志)和新的变量上下文。好的,谢谢!我正在看答复中的第3条。您可以覆盖其值的原因是什么?可能用作变量的“重置”?谢谢每个命令提示符会话都会创建自己的变量上下文。它还会读取注册表中写入的环境变量,但使用
set
命令定义的所有变量仅对此会话有效。因此,您可以使用set覆盖环境变量值,但它只对当前会话有效。谢谢您的回复。我理解。祝你有美好的一天
for /f "useback tokens=* delims=" %%# in ("c:\command.file") do set "com=%%#"