Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Batch file 如何在bat文件中使用goto函数?_Batch File_If Statement_Goto - Fatal编程技术网

Batch file 如何在bat文件中使用goto函数?

Batch file 如何在bat文件中使用goto函数?,batch-file,if-statement,goto,Batch File,If Statement,Goto,我正在编写bat文件,第一个语句中的if语句goto命令不起作用 :purge_operation set /p ABC_DEF=Are you want to Purge ABC or DEF Data ? (ABC/DEF): :start if %ABC_DEF%==ABC goto ABC if %ABC_DEF%==DEF goto DEF :end :ABC echo purge ABC data ! :DEF echo purge DEF data ! pause >

我正在编写bat文件,第一个语句中的if语句goto命令不起作用

:purge_operation
set /p ABC_DEF=Are you want to Purge ABC or DEF Data ? (ABC/DEF):

:start
if %ABC_DEF%==ABC goto ABC
if %ABC_DEF%==DEF goto DEF
:end

:ABC
echo purge ABC data !

:DEF
echo purge DEF data !

pause >nul
输出:------

实际结果-----

Are you sure you want to Purge DATA ? (Y/N):Y
Are you want to Purge ABC or DEF Data ? (ABC/DEF):ABC
purge ABC data !
purge DEF data !
预期结果--

Are you sure you want to Purge DATA ? (Y/N):Y
Are you want to Purge ABC or DEF Data ? (ABC/DEF):ABC
purge ABC data !

Goto将执行点更改为标签。标签本身不会改变执行行为。换句话说,在批处理文件中的每个逻辑单元之后,您需要更改控制流,否则它将继续执行下一条语句

例如,您可以修改示例批处理文件以仅执行以下所选结果之一:

:purge_operation
set /p ABC_DEF=Are you want to Purge ABC or DEF Data ? (ABC/DEF):

:start
if %ABC_DEF%==ABC goto ABC
if %ABC_DEF%==DEF goto DEF
echo Unknown entry
goto :EOF

:ABC
echo purge ABC data !
goto :done

:DEF
echo purge DEF data !
goto :done

:done
pause >nul

第二个goto:done是完全不必要的,但这是一个好习惯,以防将来添加更多分支可能性。

goto将执行点更改为标签。标签本身不会改变执行行为。换句话说,在批处理文件中的每个逻辑单元之后,您需要更改控制流,否则它将继续执行下一条语句

例如,您可以修改示例批处理文件以仅执行以下所选结果之一:

:purge_operation
set /p ABC_DEF=Are you want to Purge ABC or DEF Data ? (ABC/DEF):

:start
if %ABC_DEF%==ABC goto ABC
if %ABC_DEF%==DEF goto DEF
echo Unknown entry
goto :EOF

:ABC
echo purge ABC data !
goto :done

:DEF
echo purge DEF data !
goto :done

:done
pause >nul
第二步:完成是完全没有必要的,但这是一个好习惯,以防将来添加更多分支可能性。

在阅读了使用set/p提示用户的常见问题以及必须付出多少努力才能确保故障安全后,查看我的回答,阅读使用为此类任务设计的命令选项,在定义的选项之间进行选择要容易得多

@echo off
echo Select the data to purge:
echo/
echo   1 ... ABC
echo   2 ... DEF
echo/
%SystemRoot%\System32\choice.exe /C 1ABC2DEF /N /M "Do you want to purge ABC or DEF data?"
echo/
if errorlevel 4 goto DEF

echo Purge ABC data!
goto Done

:DEF
echo Purge DEF data!

:Done
echo/
pause >nul
批处理文件用户可以按

1、A、B、C、A、B、C选择数据ABC或 2,D,E,F,D,E,F选择数据定义或 Ctrl+C在用户再次确认后退出批处理文件处理。 如果音频输出未静音,且choice等待option/C不区分大小写后定义的一个键,则每隔按一次键就会产生短错误噪声

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

选择/? 回声/? 转到/? 如果/? 暂停/? 另请参见DosTips论坛主题:

在阅读了使用set/p提示用户的常见问题以及为确保其故障安全必须付出的努力后,查看我的答案,阅读使用为此类任务设计的命令选项在定义的选项之间进行选择要容易得多

@echo off
echo Select the data to purge:
echo/
echo   1 ... ABC
echo   2 ... DEF
echo/
%SystemRoot%\System32\choice.exe /C 1ABC2DEF /N /M "Do you want to purge ABC or DEF data?"
echo/
if errorlevel 4 goto DEF

echo Purge ABC data!
goto Done

:DEF
echo Purge DEF data!

:Done
echo/
pause >nul
批处理文件用户可以按

1、A、B、C、A、B、C选择数据ABC或 2,D,E,F,D,E,F选择数据定义或 Ctrl+C在用户再次确认后退出批处理文件处理。 如果音频输出未静音,且choice等待option/C不区分大小写后定义的一个键,则每隔按一次键就会产生短错误噪声

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

选择/? 回声/? 转到/? 如果/? 暂停/?
另请参阅DosTips论坛主题:

标签只是可以跳转到的标签,不会妨碍程序流程的运行。因此,请更改您的期望值或插入额外的goto:eof,其中eof是一个不可见的标签,表示文件结束。如何在StatementLabels中使用goto:eof标签只是可以跳转到的标签,并且不会妨碍程序流的运行。因此,请更改您的期望值或插入额外的goto:eof,其中eof是一个不可见的标签,表示文件结束。如何在我的状态中使用goto:eof如何在if条件下在bat文件中的未知条目中打印消息?请您提供帮助。同时,在未知输入消息@Anon之后,再次给机会键入如何在中的未知条目中打印消息bat文件处于“如果”状态,请您提供帮助。并且在未知输入消息@Anon Coward之后再次给出机会类型