Windows批处理中的条件判断:IF %ERRORLEVEL% LEQ 1 goto okay解析

5星 · 超过95%的资源 需积分: 49 5 下载量 48 浏览量 更新于2024-12-24 收藏 3KB TXT 举报
"批处理中的条件处理:if命令IF %ERRORLEVEL% LEQ 1 goto okay" 在批处理脚本中,`if`命令是一种关键的控制结构,用于执行条件判断并根据结果执行不同的操作。它允许我们基于特定条件来决定是否运行某个命令或执行一组指令。下面是对`if`命令的详细解释: 1. **IF %ERRORLEVEL% LEQ 1 goto okay** 这个命令检查 `%ERRORLEVEL%` 变量的值是否小于或等于1。`%ERRORLEVEL%` 是一个特殊的环境变量,存储了上一个程序或命令执行后的退出代码。如果退出代码等于或小于1,脚本将跳转到标签`okay`处继续执行。这通常用于检查程序是否成功执行,因为0通常表示成功,非零值表示错误。 2. **IF [NOT] 错误码比较命令** `IF [NOT] ERRORLEVEL number command` 结构用于检查上一个命令的退出代码是否等于或大于指定的数字。`NOT`关键字使得条件在错误码不等于指定值时才为真,执行后面的命令。 3. **IF [NOT] 字符串比较命令** `IF [NOT] string1==string2 command` 比较两个字符串是否相等。如果字符串相同,条件为真,执行命令。`NOT`可以用于反转条件,使得在字符串不匹配时执行命令。 4. **IF [NOT] 文件存在命令** `IF [NOT] EXIST filename command` 检查指定的文件是否存在。如果文件存在,条件为真,执行命令。`NOT`可以用来在文件不存在时执行命令。 5. **ELSE 子句** `ELSE` 子句允许在条件不满足时执行另一组命令。它必须紧跟在`IF`命令的同一行上,或者在一对括号中与`IF`在同一行上,以保持批处理语法的正确性。 6. **扩展的IF命令** 如果命令扩展名被启用,`if`命令可以支持更多功能: - `IF [/I] string1 compare-op string2 command` 允许更复杂的字符串比较,包括不区分大小写的比较(通过`/I`开关)和各种比较运算符(如`EQU`, `NEQ`, `LSS`, `LEQ`, `GTR`, `GEQ`)。 - `IF CMDEXTVERSION number command` 检查命令扩展版本号是否等于指定值,常用于版本控制。 - `IF DEFINED variable command` 判断环境变量是否已定义,如果定义则条件为真。 7. **错误码和跳转** `%ERRORLEVEL%` 的值可以被用作跳转标签,如`goto answer%ERRORLEVEL%`,这样可以根据程序返回的错误代码执行相应的标签(如`:answer0`和`:answer1`)。 8. **变量和命令行** `%CMDCMDLINE%` 环境变量包含传递给CMD.EXE的原始命令行,而 `%CMDEXTVERSION%` 提供了命令扩展的当前版本号。 在编写批处理脚本时,`if`命令及其变体是实现条件逻辑和流程控制的关键工具。了解和熟练运用这些命令,能够帮助我们创建更加灵活和智能的批处理程序。

将如下bat脚本转换为shell脚本语言:@echo off set count=0 dir E:\ > nul 2>&1 if not %errorlevel% == 0 ( (echo E not exist) & pause && exit ) else ( (echo E exist) ) setlocal enabledelayedexpansion :loop for /f "skip=1 tokens=1" %%a in ('adb devices') do ( if not "%%a"=="List" ( set /a count+=1 ) ) if %count% gtr 0 ( echo found %count% devices goto end ) else ( echo device list is empty goto loop ) :end :read sn :: 将文件系统挂载为可写 adb root adb remount :: 获取当前时间戳,格式为yyyymmdd_hhmmss set timestamp=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2% :: 获取设备SN set retry_times=0 :get sn for /f "delims=" %%i in ('adb shell getprop ro.serialno') do set "devicesn=%%i" set /a "retry_times=retry_times+1" if not defined devicesn ( if %retry_times% leq 2 ( echo Failed to read device SN, try again. Retry count= %retry_times% goto :get sn ) else ( echo Failed to read device SN after multiple retries, please check the connection and try again later. pause && exit ) ) echo devicesn=%devicesn% timestamp=%timestamp% :: 以设备序列号和时间戳为文件夹名创建目录 set device_dir=%devicesn%_%timestamp% md "E:\Raven_DualCam\%device_dir%" && echo create "%device_dir%" success if %errorlevel% neq 0 ( echo create "%device_dir%" fail pause && exit ) :: 将指定的文件pull到E盘 adb pull /mnt/vendor/persist/camera/dualcam_cali.bin E:\Raven_DualCam\%device_dir%\dualcam_cali.bin adb pull /mnt/sdcard/DCIM/DoubleCam E:\Raven_DualCam\%device_dir%\DoubleCam pause

2023-06-13 上传