@echo off
set file_path=C:\path\to\file.txt
IF EXIST "%file_path%" (
echo File exists
) else (
echo File does not exist
)
exit /b
这表示退出当前的批处理,而不是退出整个cmd.exe。
这是一个无需声明的内置变量,cmd中此变量用于表示上一段命令是否执行成功,若成功,则为0。
例如:
@echo off
echo Testing ERRORLEVEL variable example
dir non_existent_folder
set flag0=%ERRORLEVEL%
if %flag0% equ 0 (
echo Command executed successfully
) else (
echo Command failed with error
)
如果在批处理文件中使用exit /B 1来设置退出代码为 1,那么在调用该批处理文件的CMD窗口中,%ERRORLEVEL%的值就会变为 1。这样就可以通过判断%ERRORLEVEL%的值来获取批处理文件的执行状态。
在setlocal之后声明的变量,在执行endlocal之后会被自动删除。
即setlocal和endlocal规定了变量的作用域范围。相当于C语言的{}。
@echo off
set var=1
setlocal
set var_in_local=2
echo var = %var%, var_in_local=%var_in_local%
rem 输出为var = 1, var_in_local=2
endlocal
echo var = %var%, var_in_local=%var_in_local%
rem 输出为var = 1, var_in_local=
通常使用del进行批量删除时,会询问用户确认,例如:
D:\test>del .\*
D:\test\*, Are you sure (Y/N)?
/q参数表示在执行删除操作时不要提示用户确认,直接删除。
相当于python的name = input("请输入您的名字")。
@echo off
set /p name=请输入你的名字:
echo 你输入的名字是 %name%
可以用于提示用户确认:
@echo off
setlocal
set /p confirm=确认执行吗?(输入Y/N)
if /i "%confirm%"=="Y" (
echo 用户确认执行,开始执行相应操作
REM 在这里编写需要执行的命令
) else (
echo 用户取消执行,退出脚本
)
endlocal
听说==用于判断字符串相同,而equ除了字符串,还可以用于判断数值。
if hah equ hah (echo yes)
rem 输出 yes
if 10 equ 0x0a (echo yes)
rem 因为0x0a表示十六进制的10,所以条件成立,输出yes
if 10 equ 012 (echo yes)
rem 因为012表示八进制的10,所以输出yes
call指令可以实现程序跳转,当跳转到的程序执行完毕之后,会返回到call语句的下一条继续执行。
call后可以跟bat标签、或者其它bat文件名。
需要注意的是,call指令只是简单的执行流跳转,并不会开辟新的进程。
也就是说,若parent.bat调用了child.bat,在child.bat中可以访问到parent.bat中定义的变量。
rem 此为parent.bat
@echo off
set x=2
call child.bat
echo call结束之后会执行这条语句
exit
rem 此为child.bat
@echo off
echo x
rem 可以输出parent.bat中定义的x
使用call跳转到标签处,可以模拟函数:
@echo off
rem 定义函数
:myFunction
echo 函数被调用了
exit /b
rem 主程序开始
echo 主程序开始
rem 调用函数
call :myFunction
echo 主程序结束
pause
其中:myFunction中的exit /b可以使程序跳转回call语句处继续执行,若将exit /b替换为exit,则:myFunction结束之后将直接退出cmd。