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

回复 6# apang

谢谢你,可以用,是我想要的效果。
查找1050个文件用时约16秒,不知有没更快的办法。

另请问,如果查找的关键字不止一个,
如同时存在“LC  ABC ”、“xyz:   1.5”、“mat   mr5”,该如何修改,谢谢!

TOP

  1. @echo off
  2. set "fPath=D:\Test\"
  3. set "dt=20150301080000"
  4. set "keyWord=:LC  ABC"
  5. pushd "%fPath%"
  6. set "ph=%fPath:~2%"
  7. set "w=wmic DataFile where "Drive='%fPath:~,2%' and Path='%ph:\=\\%' and Extension='txt'" get LastModified^,Name"
  8. (for /f "tokens=1*" %%a in ('%w% ^| findstr /b [0-9]') do (
  9.         if "%%~na" gtr "%dt%" (
  10.                 for /f "delims=" %%c in ("%%b") do echo,%%~nxc
  11.         )
  12. ))>$
  13. findstr /i /r /e /m /c:"%keyWord%" /f:$ > "%~dp0a.txt"
  14. del $
  15. pause
复制代码

TOP

回复 4# pcl_test

谢谢,你提的问题已在顶楼更新。
指明第3行,主要是考虑到方便自已更改,查找其它行。比如列出第2行是AA,且第5行是CC,且、、的列表。

代码可以用,是我想要的效果。只是速度稍有些慢,处理20个文本需要15秒。

我有个笨办法,
1)用find 找出含 关键字的文本,生成列表1.txt
2)用Dir筛出时间>??的文本,生成列表2.txt
3)找出1.txt,2.txt中公共部分,得到a.txt
但不会写。

TOP

本帖最后由 pcl_test 于 2015-3-3 18:47 编辑

回复 3# syqh2010
嗯,提问者的表达都很差,而且很不严谨,批处理的编写是要依据一定的规则的,如果问题描述不够清楚和严谨,那么就会有出入,像你列出的条件,是要找出同时满足前两个要求的txt文件吗?还是分别列出来?还有第三行的意思,要是前面有空行,一个空行算一行吗?如果C是唯一的,那么就不需要再画蛇添足的说明在第三行,因为第三行的意思会有歧义
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::设置文件夹路径
  4. cd /d "D:\test\"
  5. for %%a in (*.txt) do (
  6. set "file=%%~dpnxa"
  7. set "file=!file:\=\\!"
  8. for /f "tokens=1* delims=." %%e in ('wmic datafile where name^="!file!" get LastModified ^|find "+"') do set "fdt=%%e"
  9. >temp.vbs echo,if !fdt! ^>= 20150301080000 then
  10. >>temp.vbs echo,WSH.Echo "true"
  11. >>temp.vbs echo,else
  12. >>temp.vbs echo,WSH.Echo "false"
  13. >>temp.vbs echo,end if
  14. for /f %%b in ('cscript /nologo temp.vbs') do set "t=%%b"
  15. del temp.vbs /f /q >nul
  16. if "!t!" equ "true" (
  17. findstr /c:":LC  ABC" "%%a" >nul && >>"%~dp0a.txt" echo,%%~a
  18. )
  19. )
  20. pause
复制代码
1

评分人数

TOP

谢谢你,我稍后试试。
我描述可能有歧义,是找出ABC,不是修改成ABC。

TOP

本帖最后由 pcl_test 于 2015-3-3 14:21 编辑

回复 1# syqh2010
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::设置文件夹路径
  4. cd /d "D:\test\"
  5. for %%a in (*.txt) do (
  6. ::导出文件列表
  7. set "file=%%~dpnxa"
  8. set "file=!file:\=\\!"
  9. for /f "tokens=1* delims=." %%e in ('wmic datafile where name^="!file!" get LastModified ^|find "+"') do set "fdt=%%e"
  10. >temp.vbs echo,if !fdt! ^>= 20150301080000 then
  11. >>temp.vbs echo,WSH.Echo "true"
  12. >>temp.vbs echo,else
  13. >>temp.vbs echo,WSH.Echo "false"
  14. >>temp.vbs echo,end if
  15. for /f %%b in ('cscript /nologo temp.vbs') do set "t=%%b"
  16. del temp.vbs /f /q >nul
  17. if "!t!" equ "true" >>"%~dp0a.txt" echo,%%~a
  18. ::修改:LC值
  19. for /f "tokens=1* delims=:" %%b in ('findstr /n ":LC" "%%a"') do set n=%%b
  20. set m=1
  21. for /f "tokens=1* delims=:" %%c in ('findstr /n .* "%%a"') do (
  22. if !m! == !n! (
  23. >>$ echo,:LC  ABC
  24. ) else (
  25. >>$ echo,%%d
  26. )
  27. set /a m+=1
  28. )
  29. move $ "%%a"
  30. )
  31. pause
复制代码

TOP

返回列表