發布時間:2024-04-11 文章來源:深度系統下載 瀏覽:
希望用批處理命令把硬盤中指定的文件夾,比如QQ文件夾,復制到其他文件夾。同時又希望能適用于不同的電腦,每個電腦QQ文件夾的保存位置不同,因此要能夠自動實現搜索。 因此我就花了點時間,自己做了一個批處理文件,在此分享給大家。歡迎大家相互交流。 我做批處理主要用到的是以下幾個命令: 1.——setlocal ENABLEDELAYEDEXPANSION 作用是延遲變量,全稱"延遲環境變量擴展"。主要用于定義一個變量Milti_ID, 每搜索到一 個要找的文件夾QQTEST,會自動加1,最后統計出當前復制的是第幾個,一共搜索出幾個。 2.——dir /s /ad /b 作用是列出當前文件夾下的所有子文件夾名稱。便于下一步的搜索是否存在我們要找的文件夾QQTEST. 3..——for /f "delims=" 用于字符段的提取(dir 命令的結果),最終用于判斷是否存我們要找的文件夾。 4.——xcopy 作用是幫我們把找到的QQTEST文件夾復制到預先定義好的位置。 5..——If exist 作用是判斷某個文件夾是否存在。如果存在,就執行某些命令。 主要功能:
注意事項: 我的批處理主要是通過DIR /s /ad 列出所有包含搜索關鍵字文件夾或者子文件夾的方式來實現搜索的。但是我發現當磁盤根目錄下面存在我要搜索的文件夾QQTEST時,會對DIR /s /ad的搜索結果出現干擾。因此我用了一個比較笨的方法規避這個問題。 -對于磁盤根目錄下的文件夾。我要判斷是否存在QQTEST這個文件夾。 我是通過If exist來判斷的。如果存在,我就先把它復制到指定的位置。然后把這個文件夾暫時重新命名為QQTEST_copied. 這樣就不會干擾我后期對于其他位置通過DIR /s /ad進行搜索子文件。 等全部搜索和復制完成后,再把更目錄下面的QQTEST_copied還原為原本的文件名QQTEST. 全部批處理文件命令如下: @echo OFF setlocal ENABLEDELAYEDEXPANSION ::===================================================================== ::使用簡單說明 ::文件夾名稱為為QQTEST,找到一個就停止,如果要查找所有的QQTEST, ::則去掉goto語句: goto finished ::這一段是設置變量,可以把D修改為需要搜索的盤符, ::把QQTEST修改為需要搜索的文件夾名稱 ::把E修改為希望復制到的盤符 ::變量Milti_ID是當搜索出多個不同位置的文件夾的時候,復制到新位置的文件夾名稱后綴 ::同時也用于統計最終一共搜索出多少文件夾。 ::===================================================================== set Search_Disk=D set Search_Folder=QQTEST set Copy_to=E set /a Milti_ID=0 ::===================================================================== ::===================================================================== ::這一段是檢查磁盤根目錄下面是否存在要找的目錄,如果有,為了減少程序運行時間 ::可以運行完成后,通過 goto finished直接完成后退出程序 ::===================================================================== If exist "%Search_Disk%:\%Search_Folder%" ( @echo off set /a Milti_ID=!Milti_ID!+1 echo ============================================= echo 在磁盤根目錄下找到指定文件夾%Search_Disk%:\%Search_Folder%, 并且完成復制 echo 即將復制到新位置: %Copy_to%:\%Search_Folder% echo ============================================= xcopy "%Search_Disk%:\%Search_Folder%" "%Copy_to%:\%Search_Folder%" /O /X /E /H /K /I echo ============================================= echo 復制完成 echo 為了不影響后期檢查其它子文件夾,我們會臨時把根目錄下的%Search_Disk%:\%Search_Folder% 重命名 echo 重命名為%Search_Disk%:\%Search_Folder%_copied echo ============================================== rename "%Search_Disk%:\%Search_Folder%" "%Search_Folder%_copied" echo ============================================== echo 重命名為%Search_Disk%:\%Search_Folder%_copied 完成 echo ============================================== ) ::===================================================================== ::===================================================================== ::這一段是檢查所有子目錄下面是否存在要找的目錄 ::===================================================================== @echo off cd /d %Search_Disk%:\ for /f "delims=" %%B in ('dir /s /ad /b %Search_Folder%') do ( if exist "%%B" ( set /a Milti_ID=!Milti_ID!+1 echo ======================================================================================= echo 發現了第!Milti_ID!處文件夾%Search_Folder% echo 在磁盤%%B下找到指定文件夾%Search_Folder%." echo 即將復制到新位置: %Copy_to%:\%Search_Folder%!Milti_ID! echo ======================================================================================= xcopy "%%B" "%Copy_to%:\%Search_Folder%!Milti_ID!" /O /X /E /H /K /I ) ) :finished ::===================================================================== echo 運行完成.一共找到 !Milti_ID! 處文件夾 %Search_Folder% echo 一共完成 !Milti_ID! 處文件夾 的復制 ::===================================================================== If exist "%Search_Disk%:\%Search_Folder%_copied" ( echo 恢復剛才修改的根目錄下的%Search_Disk%:\%Search_Folder% 重命名操作,去掉后綴_copied echo 把文件%Search_Disk%:\%Search_Folder%_copied恢復為:%Search_Disk%:\%Search_Folder% echo ============================================== rename "%Search_Disk%:\%Search_Folder%_copied" "%Search_Folder%" echo ============================================== echo 恢復文件名為%Search_Disk%:\%Search_Folder% 完成 echo ============================================== ) pause 以上部分為全部批處理命令。 為了便于了解批處理的運行狀態,里面會實時顯示目前的工作進展,比如搜索到第幾個,一共有幾個,是否完成復制。復制到哪里。運行過程如下圖。
運行結果,我這里設置的是把文件夾復制到E盤。從下圖可以看到,每個找到的都被復制,并且按照找到的先后順序,文件夾名稱后面還增加了編號。 ![]() |
上一篇: