当文件已存在时,如何在批处理文件的开头退出批处理?

Eli*_*son 3 cmd if-statement batch-file

我有一个批处理文件,我的目标是只使用一次.在进一步执行时,此批处理文件应该什么也不做.为了解决这个任务,我决定用来If Exist检查批处理脚本末尾创建的文件.所以在一开始我有这个(我去了正确的目录):

If Exist "file.txt" (
goto exit
)
Run Code Online (Sandbox Code Playgroud)

exit在文件的末尾设置了一个标记.

我会赞赏替代方法,但我更喜欢这个问题的解决方案.

sjs*_*sam 5

goto 手册说:

指示批处理程序跳转到标记的行.

语法GOTO标签

我猜标签(我不会使用术语标记)名称不应该是exit具有相同名称的Windows命令.将标签更改为

:exitprocess
Run Code Online (Sandbox Code Playgroud)

并做

if exist "file.txt" goto exitprocess
Run Code Online (Sandbox Code Playgroud)

但是,如果您希望使用exit变通方法作为标签使用

if exist "file.txt" goto :exit
Run Code Online (Sandbox Code Playgroud)

记住冒号,这是告诉goto找到名为的标签exit

礼貌:@somethingdark的解决方法.


Mof*_*ofi 5

微软向GOTO解释了使用的可能性

goto :EOF
Run Code Online (Sandbox Code Playgroud)

退出批处理文件或批处理子程序的处理,其中标签EOF(文件结束)是预定义的,不得在批处理文件中明确定义.

退出批处理文件或批处理子程序的处理的另一种方法是使用命令EXIT with parameter /B,即

exit /B
Run Code Online (Sandbox Code Playgroud)

这仅退出批处理而不是整个命令过程,这使得使用EXIT退出批处理子例程或从另一个批处理文件调用批处理文件有所不同.

所以它也可以用于这个任务

if exist "file.txt" goto :EOF
Run Code Online (Sandbox Code Playgroud)

要么

if exist "file.txt" exit /B
Run Code Online (Sandbox Code Playgroud)

这两行都导致退出当前批处理并返回到调用进程,这是直接调用批处理文件时的命令进程,导致退出命令进程.