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

[文本处理] 批处理如何判断文本中是否有内容?

[复制链接]
发表于 2010-10-14 21:26:31 | 显示全部楼层 |阅读模式
如何判断文本中是否有内容?或者是否为空?
分几种情况:
1、新建文本,什么都没有写入;
2、新建文本,但里面写入了3万多行的回车,文件有60KB多;
3、新建文本,里面写入N多空格,有100KB多;
4、新建文本,里面写入特殊字符;
以上四种情况只做探讨,我只要判断是否有内容(非上面四种特殊情况),是否有字母啊、汉字啊、标点符号就可以了。
原来用for和defined写过一个,可今天用搞了半天都不见得,当文本中没有任何东西时,FOR的DO后面的命令直接不执行!~

[ 本帖最后由 cjiabing 于 2010-10-14 21:29 编辑 ]
发表于 2010-10-14 21:30:06 | 显示全部楼层
判断文件大小是否为0不行吗?
 楼主| 发表于 2010-10-14 21:34:48 | 显示全部楼层

回复 2楼 的帖子

上面第二、第三种情况表明判断大小是不行的!~
郁闷,398KB的空格直接把Notepad++挂了!~
发表于 2010-10-14 21:47:00 | 显示全部楼层
给你个例子也许有用(最近刚开始看,没办法)
  1. wmic datafile where "drive='e:' and path='\\test\\' and filename='cc' and extension='bat' and filesize>'1000'" list
复制代码
意思是查找E盘下TEST目录下文件大于1KB的cc.bat文件,并显示出来
如果去掉and path='\\test\\' 那就是E盘下的所有目录查找了
 楼主| 发表于 2010-10-14 21:49:56 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. echo 1
  3. set /p m=<1.txt
  4. if  defined m (echo 文本有内容) else (echo 空文本)
  5. ::适应情况:什么都没有;只有回车;把空格当做内容;
  6. ::无法准确判断,有回车和空格外加一个字母,竟然判断为空文本。可能是以第一行是否存在空格或者字符作为判断依据的,证据就是第一行是回车,第二行有字母,它竟然判为空文件!
  7. pause
  8. echo 2
  9. for /f "tokens=*" %%i in (1.txt) do (
  10. set k=%%i
  11. if  defined k echo 文本有内容||echo 空文本
  12. )
  13. ::当文本什么都没有的时候无法正常执行,但文本只有一个字符时可以判断。
  14. ::适应情况:……没价值??
  15. pause
  16. echo 3
  17. for /f "tokens=*" %%i in ("!m!") do (
  18. IF errorlevel 1 echo 空文本
  19. set h=%%i
  20. if  defined h echo 文本有内容||echo 空文本
  21. )
  22. ::当文本什么都没有的时候直接退出。
  23. ::适应情况:只有空格;……
  24. pause
复制代码

[ 本帖最后由 cjiabing 于 2010-10-14 22:03 编辑 ]
 楼主| 发表于 2010-10-14 23:40:22 | 显示全部楼层

回复 6楼 的帖子

我在3L都说了嘛,一个只有三万多个回车没有其它字符包括没有空格的文本它的大小都有60多KB,你能判断它非空是好的。
但看题目的要求,我不是要求判断有空格和回车,而是判断是否含有字符串——字母、汉字、符号等等。在实际应用中,很少去介意文本没有其它内容外还去在意它是否有空格和回车,假如我要将文本内容赋值给一个变量,那么我需要判断这个变量是否已经被赋值了,然后执行相应的命令。
发表于 2010-10-14 23:45:58 | 显示全部楼层
你的意思是说只有回车或空格的文本当作空文本处理?
  1. @echo off
  2. set "n="
  3. for /f "tokens=* delims=  " %%a in (a.txt) do (
  4.    if not "%%a"=="" set n=a
  5. )
  6. if not defined n (echo 空文本或是仅含回车、空格、全角空格) else echo 非空
  7. pause
复制代码

[ 本帖最后由 随风 于 2010-10-14 23:51 编辑 ]
 楼主| 发表于 2010-10-15 01:00:02 | 显示全部楼层

回复 7楼 的帖子

不错,就这样!~很巧妙!~
发表于 2012-10-19 09:40:32 | 显示全部楼层
回复 7# 随风


    我想问下,你的是针对某个文本的,要是我要针对一个文件夹内的文本,怎么写
谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 15:20 , Processed in 0.019011 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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