|
|
发表于 2024-7-10 11:37:19
|
显示全部楼层
本帖最后由 aloha20200628 于 2024-8-3 10:21 编辑
在批处理脚本中用系统变量 errorlevel 判断时,须注意‘预处理’对复合语块(典型如for或if)内的系统变量会预先赋值的影响,errorlevel 也是系统变量,亦在‘法网’之中,如下式中的 errorlevel 会被预先赋值=0,即运行时会无视以前 findstr 的真实执行结果
- for %%F in (*.txt) do (
- findstr /i "abc" "%%F">nul
- if errorlevel 0 (echo,有》%%F) else (echo,无》%%F)
- )
复制代码 所以,还是老办法,采用延迟变量解决预处理问题,如下式
- setlocal enabledelayedexpansion
- for %%F in (*.txt) do (
- findstr /i "abc" "%%F">nul
- if !errorlevel! equ 0 (echo,有》%%F) else (echo,无》%%F)
- )
复制代码 就是不用延迟变量,也有其道,如下式
- for %%F in (*.txt) do (findstr /i "abc" "%%F">nul&&echo,有》%%F||echo,无》%%F)
复制代码 以上关于 ‘errorlevel 也是系统变量’ 的更严谨说法及其更多用法可详见另帖》http://www.bathome.net/thread-69472-1-1.html 18楼
|
|