找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 59916|回复: 6

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

[复制链接]
发表于 2012-3-2 11:00:26 | 显示全部楼层 |阅读模式
RT,我用findstr查找许多txt文件,如果某个文件中没有要查找的字符串,怎样判断findstr的返回值,并做出提示呢,我用空字符试了一下发现批处理不能运行,到底该怎么判断呢?
求助各位高手指点一下,谢了哈~
发表于 2012-3-2 11:10:59 | 显示全部楼层
本帖最后由 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  

复制代码
 楼主| 发表于 2012-3-2 16:56:48 | 显示全部楼层
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下的文件列表,格式为编号:文件名,之所以这么写是我还想统计别的信息,需要用到各个文件的文件名。
 楼主| 发表于 2012-3-2 17:00:39 | 显示全部楼层
自己顶一下,坐等高手~~
发表于 2012-3-2 18:00:56 | 显示全部楼层
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 失败
复制代码
 楼主| 发表于 2012-3-2 19:41:14 | 显示全部楼层
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
复制代码
但是这样写怎么运行不了,窗口一闪而过~~
求解答 ~
发表于 2012-3-2 20:05:44 | 显示全部楼层
  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 21:12 , Processed in 0.018257 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表