批處理新手入門導讀[視頻教程]批處理基礎視頻教程[視頻教程]VBS基礎視頻教程
[批處理文件精品]批處理版照片整理器[批處理文件精品]純批處理備份&還原驅動在線第三方下載
返回列表 發帖

[文件操作] 批處理怎么快速搜索文件但不太多影響系統?

高手們:
  大家好,我已經上傳了我多日來的繼續,家底都漏光了,就這么點能力,而且都是在這個論壇上學的,至于更高的,在我寫的應用這方面,我實在覺得到了死胡同,希望高手撥個豁,我期待這我的武術能更高一層:victory:
    好!苦于尋找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

返回列表
36选7开奖结果今天福建 上海快3开奖走势图工具 股票配资平台无法出金 三国杀民间玩法及规则 孙阿姨炒股记 北京快中彩质合走势 江苏十一选五预测专家推荐 大乐透预测最准软件 上海快三预测上海快3推荐 基金配资价格 喜乐动app免费下载 广西快3开 广东11选5助手 娱乐商城 股票涨跌无限制 大乐透app下载安装 广西快乐十分外围