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

[文件操作] 批处理怎么快速搜索文件但不太多影响系统?

高手们:
  大家好,我已经上传了我多日来的继续,家底都漏光了,就这么点能力,而且都是在这个论坛上学的,至于更高的,在我写的应用这方面,我实在觉得到了死胡同,希望高手拨个豁,我期待这我的武术能更高一层
    好!苦于寻找TF卡上藏的歌曲,不想用系统自带的
  经常用
  1.    for /d  /r h: %%i in (*游戏*) do ren "%%i" 娱乐
  2.    for /r "h:\歌曲" %%i in (*第一场雪*) do del /q "%%i"
复制代码
后来用排除部分目录
如:
  1. dir /ad-s-h /b h:|findstr /v "雪山飞狐"|findstr /v "轩辕"|findstr /v "修真">>d:mulu.txt
  2. for /f "delims=" %%i in (d:mulu.txt) do (
  3. for /d  /r "h:\%%i" %%j in (*妹妹*) do (
  4. ren "%%j" 哥哥
  5. )
复制代码
(这个p 不知道为什么行不通)
我就这2下子,常常看P,也没找到,希望高手给我点你们宝贵的p经验
  这样操作非常耗内存,有简单有效的其他, 搜寻命令吗?
  特别是我喜欢看小说,下了很多小说,目录乱,经常删除,更改,移动,
  1. @echo off
  2. title 自动检测
  3. mode con: cols=40 lines=15
  4. setlocal enabledelayedexpansion
  5. set dr1=%cd%
  6. set dr2=%cd%\批处理临时文件夹
  7. if not exist 批处理临时文件夹 md 批处理临时文件夹
  8. cd /d %dr2%
  9. :again
  10. set num1=%num%
  11. for %%i in (I,J,K,L,M,N,O,P,Q,R ) do (
  12. set m%%i=                   %%i:不存在或者没插好
  13. )
  14. del /q lieb.txt 2>nul
  15. call :xiezc
  16. set /a num=0
  17. wmic logicaldisk where "drivetype=2" get caption|find ":">>lieb.txt
  18. for /f  "skip=1 delims=:"  %%a in (lieb.txt) do (     
  19.       set /a num+=1   
  20.       if exist "%%axie.txt" (
  21.       for %%i in (I,J,K,L,M,N,O,P,Q,R ) do (
  22.       if "%%a" == "%%i" set m%%a=!num! :%%a:复制完毕卸载中!
  23.       )
  24.       )
  25.       call :jiestix %%a
  26.       if exist %%a:k.txt (
  27.       for %%i in (I,J,K,L,M,N,O,P,Q,R) do (
  28.       if "%%a" == "%%i" set m%%a=!num! :%%a:还在检查中!
  29.       )
  30.       )
  31.       if exist "%%a:t.txt"  (
  32.       for %%i in (I,J,K,L,M,N,O,P,Q,R) do (
  33.       if "%%a" == "%%i" set m%%a=!num! :%%a:复制数据中,请留意!
  34.       )
  35.       )  
  36.       if exist "%%a:o.txt"  (
  37.       for %%i in (I,J,K,L,M,N,O,P,Q,R) do (
  38.       if "%%a" == "%%i" set m%%a=!num! :%%a:复制已经结束,请注意!
  39.       )
  40.       )
  41.       if not exist "%%a:o.txt" (
  42.       if not exist "%%a:t.txt" (
  43.       if not exist "%%axie.txt" (  
  44.            if not exist "%%a:k.txt" (set m%%a=!num! :%%a:符合盘,即将复制 & cd /d "%dr1%\批处理包" & start /b %%a.bat & cd /d %dr2% )
  45.                                 )
  46.                                 )
  47.                                 )
  48. )
  49. mode con: cols=40 lines=15
  50. color 0f
  51. echo         本次扫描共:!num!张卡
  52. echo         上次扫描共:%num1%张卡
  53. for %%i in (I,J,K,L,M,N,O,P,Q,R) do (echo !m%%i!)
  54. echo    稍后重新扫描,请留意盘情况变化
  55. set /p=10秒<nul
  56. for /l %%i in (3 -1 0) do (
  57. for /l %%j in (1 1 4) do (set /p=<nul)
  58. if %%i lss 10 (set /p=          0%%i秒<nul) else (set /p=          %%i秒<nul)
  59. title %%i 秒后重新扫描~
  60. ping 127.0.0.1 -n 2 >nul 2>nul
  61. )
  62. goto again
  63. goto :eof
  64. :xiez
  65. if exist "%1xie.txt" (
  66.       for %%i in ( I,J,K,L,M,N,O,P,Q,R ) do (
  67.       if "%1" == "%%i" set m%1=%1:复制完毕卸载中!
  68.       )
  69.       )
  70. goto :eof
  71. :xiezc
  72.       for %%i in (I,J,K,L,M,N,O,P,Q,R) do (
  73.       if exist "%%ixiecg.txt" del /q %%ixiecg.txt
  74.       )
  75. goto :eof
  76. :jiestix
  77. if exist "%1:o.txt" (
  78.       cls
  79.       mode con: cols=30 lines=3
  80.       echo %1复制完成!
  81.       set /p=5秒<nul
  82.       for /l %%i in (1 -1 0) do (
  83.       for /l %%j in (1 1 3) do (set /p=<nul)
  84.       set /p=%%i秒<nul
  85.       color %%if
  86.       title %%i 秒后提醒结束
  87.       ping 127.0.0.1 -n 2 >nul 2>nul
  88.       )
  89.       )
  90. goto :eof
复制代码

回复 21# kzppp


    顶楼有好几个txt,你start /b调用的是哪个?

TOP

回复 20# kzppp


我每次有CALL调用内部的,你用PUSHD

call是比较影响效率的

TOP

回复 19# kzppp


有什么可以判断我调用的批被人为终止

一般是通过进程号或者cmd窗口的标题来判断

TOP

用start /b启动的代码是什么?贴出来看看是否存在影响效率的部分
BAT-VBS 发表于 2013-1-29 21:53

我本来是贴的,一看那么占网页不敢贴了,就改成TXT了

TOP

回复 18# BAT-VBS
聪明啊,我每次有CALL调用内部的,你用PUSHD ,我有个疑问,我一直觉得无论处理什么,尽量不在卡上大量扫描,甚至cd  /d 进入移动盘,我都会轻,浅,快,少地搜索下表层目录,赶紧退出,把目录存到电脑文档里,然后花费大量功夫解析后直接用DEL REN RD MD直接修改绝对路径,一减少对移动盘的伤害,现在的卡质量太坏,有好几次我把同事的卡P下,插上手机居然要格式化,插上电脑也的格式化,后来发现他们的卡有的是低速卡有的是垃圾卡,不经折腾,稍微批下,飞得格式化,我后来有手工处理,居然好了,我想是批大量读写他的卡,导致崩溃,所以才开始寻找高级的,以减少扫描,减少读写,特别是我现在用的复制命令:ROBOCOPY /S /PURGE 天啊,很方便,可惜他会扫描卡上的全部内容,虽然有镜像功能,省事可惜同事的卡都经不住考研啊

TOP

回复 16# BAT-VBS

哦我原本用XIEz程序标识复制完毕卸载中直到卸载掉这个空档的盘的状态
xiezc是用来删除留下到电脑盘里文件,本来是调用的程序在卸载后删除的,最后发现有时候,发现批处理错了,直接关闭了批,所以那个卸载文件还留在盘里,他留在盘里直接导致下个卡插上没反应,反而提示卸载中,所以就调用XIEZc每次删除那个判断卸载的文件,但这样有时会把正在卸载的盘重新调用批处理,重复处理,但因为正忙别的几乎忘记这个啦,因为他发生的几率小,居然让我给忘记了,调试的时候没出现问题,所以就留那里
     谢谢提醒帮我想个法子吧,有什么可以判断我调用的批被人为终止,这个我现在还没找到呢,有时候判断出来结果,发现不对赶紧关闭,甚至造成电脑重启,郁闷啊

TOP

  1. dir /ad-s-h /b h:|findstr /v "雪山飞狐"|findstr /v "轩辕"|findstr /v "修真">>d:mulu.txt
  2. for /f "delims=" %%i in (d:mulu.txt) do (
  3. for /d  /r "h:\%%i" %%j in (*妹妹*) do (
  4. ren "%%j" 哥哥
  5. )
复制代码


改成这样试试:
  1. for /f "delims=" %%i in ('dir /ad-s-h /b h: ^| findstr /v "雪山飞狐.* 轩辕.* 修真.*"') do (
  2.     pushd "h:\%%i"
  3.     for /d %%j in (*妹妹*) do (
  4.         ren "%%j" 哥哥
  5.     )
  6.     popd
  7. )
复制代码

TOP

  1. @echo off
  2. title 自动检测
  3. mode con: cols=40 lines=15
  4. setlocal enabledelayedexpansion
  5. set dr1=%cd%
  6. set dr2=%cd%\批处理临时文件夹
  7. if not exist 批处理临时文件夹 md 批处理临时文件夹
  8. cd /d %dr2%
  9. :again
  10. set num1=%num%
  11. for %%i in (I,J,K,L,M,N,O,P,Q,R ) do (
  12.     set m%%i=                   %%i:不存在或者没插好
  13. )
  14. del /q lieb.txt 2>nul
  15. call :xiezc
  16. set /a num=0
  17. wmic logicaldisk where "drivetype=2" get caption|find ":">>lieb.txt
  18. for /f  "skip=1 delims=:"  %%a in (lieb.txt) do (     
  19.     set /a num+=1   
  20.     if exist "%%axie.txt" (
  21.         for %%i in (I,J,K,L,M,N,O,P,Q,R ) do (
  22.             if "%%a" == "%%i" set m%%a=!num! :%%a:复制完毕卸载中!
  23.         )
  24.     )
  25.     call :jiestix %%a
  26.     if exist %%a:k.txt (
  27.         for %%i in (I,J,K,L,M,N,O,P,Q,R) do (
  28.             if "%%a" == "%%i" set m%%a=!num! :%%a:还在检查中!
  29.         )
  30.     )
  31.     if exist "%%a:t.txt"  (
  32.         for %%i in (I,J,K,L,M,N,O,P,Q,R) do (
  33.             if "%%a" == "%%i" set m%%a=!num! :%%a:复制数据中,请留意!
  34.         )
  35.     )  
  36.     if exist "%%a:o.txt"  (
  37.         for %%i in (I,J,K,L,M,N,O,P,Q,R) do (
  38.             if "%%a" == "%%i" set m%%a=!num! :%%a:复制已经结束,请注意!
  39.         )
  40.     )
  41.     if not exist "%%a:o.txt" (
  42.         if not exist "%%a:t.txt" (
  43.             if not exist "%%axie.txt" (  
  44.                 if not exist "%%a:k.txt" (
  45.                     set m%%a=!num! :%%a:符合盘,即将复制
  46.                     cd /d "%dr1%\批处理包"
  47.                     start /b %%a.bat
  48.                     cd /d %dr2%
  49.                 )
  50.             )
  51.         )
  52.     )
  53. )
  54. mode con: cols=40 lines=15
  55. color 0f
  56. echo         本次扫描共:!num!张卡
  57. echo         上次扫描共:%num1%张卡
  58. for %%i in (I,J,K,L,M,N,O,P,Q,R) do (
  59.     echo !m%%i!
  60. )
  61. echo    稍后重新扫描,请留意盘情况变化
  62. set /p=10秒<nul
  63. for /l %%i in (3 -1 0) do (
  64.     for /l %%j in (1 1 4) do (
  65.         set /p=<nul
  66.     )
  67.     if %%i lss 10 (
  68.         set /p=          0%%i秒<nul
  69.     ) else (
  70.         set /p=          %%i秒<nul
  71.     )
  72.     title %%i 秒后重新扫描~
  73.     ping 127.0.0.1 -n 2 >nul 2>nul
  74. )
  75. goto again
  76. goto :eof
  77. :xiez
  78. if exist "%1xie.txt" (
  79.     for %%i in ( I,J,K,L,M,N,O,P,Q,R ) do (
  80.         if "%1" == "%%i" set m%1=%1:复制完毕卸载中!
  81.     )
  82. )
  83. goto :eof
  84. :xiezc
  85. for %%i in (I,J,K,L,M,N,O,P,Q,R) do (
  86.     if exist "%%ixiecg.txt" del /q %%ixiecg.txt
  87. )
  88. goto :eof
  89. :jiestix
  90. if exist "%1:o.txt" (
  91.     cls
  92.     mode con: cols=30 lines=3
  93.     echo %1复制完成!
  94.     set /p=5秒<nul
  95.     for /l %%i in (1 -1 0) do (
  96.         for /l %%j in (1 1 3) do (
  97.             set /p=<nul
  98.         )
  99.         set /p=%%i秒<nul
  100.         color %%if
  101.         title %%i 秒后提醒结束
  102.         ping 127.0.0.1 -n 2 >nul 2>nul
  103.     )
  104. )
  105. goto :eof
复制代码

用start /b启动的代码是什么?贴出来看看是否存在影响效率的部分

TOP

顶楼代码中的
:xiez
是谁在调用?

TOP

回复 14# yu2n

也只有这样啦,其实我主要想求高手简化我的P,咳就这个目的,没别的
听说EVERYTHING搜索速度快,的原理是处理文件名,而不是处理文件,我就借鉴啦

TOP

本帖最后由 yu2n 于 2013-1-29 15:12 编辑

我来理解一下需求,这实际上是电脑与TF卡同步的问题。
  
我的想法:
  
问题一:7个读卡器与7张TF存储卡的对应,正确卸载拔除。
解决:
  1.  让用户自带读卡器,在读卡器上标识名称。
  2.  每张TF卡使用各自人名作为卷标,如:张三TF8G、李四TF2G……
  3.  根据读卡器读写状态指示灯判断,拔除无读写状态的读卡器。
  
  
问题二:电脑与TF卡的文件同步。
解决:
  1.  每张TF卡的根目录存在一个 sync.cfg 文本文件,里面保存该人人名、文件类别、同步目录路径、同步状态。
  2.  根据 sync.cfg 文件中记录的文件目录路径、文件类别,自动开始拷贝。
  3.  拷贝时,显示状态;拷贝完成时,弹出提示。
  4.  实现上述步骤的程序,可放置于TF卡内,在TF卡上运行,这样1,2,3步可以省略。
  
  
Ps:需求未定,代码莫谈。
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复  kzppp



给每个盘设置不同的卷标,根据卷标来判断可以吗?
HAT 发表于 2013-1-28 20:01

但还是不知到哪个读卡器装的是那个卷标的啊
关键是现实中看到电脑上卷标为“自己设置的”的卡,电脑上点击卸载后,现实中不知道去拔出哪个读卡器哦

TOP

回复 8# BAT-VBS
我马上将P复制张贴到这里,先上上主程序吧

TOP

回复 9# kzppp


不是那个盘付哦,盘付我判断的出来,就是不知道该盘付是那个读卡器的。

给每个盘设置不同的卷标,根据卷标来判断可以吗?

TOP

返回列表