[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理命令findstr如果找不到指定的字符串,返回值是什么呢?

RT,我用findstr查找许多txt文件,如果某个文件中没有要查找的字符串,怎样判断findstr的返回值,并做出提示呢,我用空字符试了一下发现批处理不能运行,到底该怎么判断呢?
求助各位高手指点一下,谢了哈~

本帖最后由 batman 于 2012-3-2 11:13 编辑
  1. @echo off
  2. findstr "bathome" a.txt>nul
  3. if %errorlevel% equ 0 (
  4.   echo 找到
  5.   ) else (
  6.   echo 没有找到
  7. )
  8. pause>nul  
复制代码
***共同提高***

TOP

batman 发表于 2012-3-2 11:10



    如果我把这个语句写到for /f循环中,单个for/f循环可以,但是2个for 循环嵌套就不能显示了,是什么问题呢?代码如下
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=: tokens=1,2" %%f in (%~dp0\1.txt) do (
  4. set rep=%%f
  5. set repo=%%g
  6. for /f  %%h  in ('findstr "最短" %~dp0\info\!repo!') do (
  7. if %errorlevel% equ 0 (
  8. echo  !repo!中有该字符)  else (
  9. echo !repo!中没有该字符
  10.                                        )
  11. )
  12. )
  13. pause>nul
复制代码
说明一下,1.txt里面放的是info下的文件列表,格式为编号:文件名,之所以这么写是我还想统计别的信息,需要用到各个文件的文件名。

TOP

自己顶一下,坐等高手~~

TOP

1、
  1. %str% 这样的变量是在解析语法之前就被解释了的,要想在解析语法之后、执行语句之前动态地解释变量,请使用 !str! 这样的延迟变量(需预先开启,站内搜索变量延迟)
复制代码
2、
  1. for /f  %%h  in ('findstr "最短" %~dp0\info\!repo!') do ...
  2. 这句其实是运行了 cmd /c findstr "最短" %~dp0\info\!repo!,再从中获取输出进行处理,所以这样取得的退出码是 cmd.exe 的,而不是 findstr.exe 的退出码
复制代码
3、
  1. 逻辑连接符是通过退出码来判定外部命令是否正确运行的,所以可以直接用:
  2. findstr "最短" %~dp0\info\!repo! && echo 成功 || echo 失败
复制代码

TOP

1、2、3、
CrLf 发表于 2012-3-2 18:00



    我按照你的意思这样写你看行吗
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=: tokens=1,2" %%f in (%~dp0\1.txt) do (
  4. set rep=%%f
  5. set repo=%%g
  6. for /f  %%h  in ('findstr "最短" %~dp0\info\!repo! && echo 成功 || echo 失败') do (
  7. if "!h!"=="成功"  (
  8. echo  !repo!中有该字符)  else (
  9. echo !repo!中没有该字符)               
  10. )
  11. )
  12. pause
复制代码
但是这样写怎么运行不了,窗口一闪而过~~
求解答 ~

TOP

  1. @echo off
  2. for /f "delims=: tokens=1,2" %%f in (%~dp0\1.txt) do (
  3.   set rep=%%f
  4.   find "最短" "%~dp0\info\%%g" && echo %%g 中有该字符 || echo %%g 中没有该字符
  5. )
  6. pause
复制代码
或者写成这样更快...
  1. pushd info
  2. for /f "delims=:" %%a in ('findstr /r /f:1.txt "最短"') do echo %%a 中有该字符
  3. for /f "delims=:" %%a in ('findstr /v /r /f:1.txt "最短"') do echo %%a 中没有该字符
  4. popd
复制代码

TOP

返回列表