最近再悟空問答上,有個網友提出個問題,他希望用批處理命令把硬盤中指定的文件夾,比如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
作用是判斷某個文件夾是否存在。如果存在,就執行某些命令。
主要功能:
- 預先定義好要搜索哪個盤
- 要搜索什麼文件夾
- 搜索到後複製到哪個位置
- 第一個再磁盤根目錄搜索到的複製到新位置,命名和原本一樣為QQTEST
- 其餘搜索到的,複製到新位置,後面加後綴。比如QQTEST2-QQTESTXXX
注意事項:
我的批處理主要是通過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盤。從下圖可以看到,每個找到的都被複制,並且按照找到的先後順序,文件夾名稱後面還增加了編號。
本文到此結束,如果覺得我的文章對你有幫助,麻煩點個贊鼓勵一下我。
最後感謝CSDN的愛吃兔嘰的魚,他的方法給了我很提供了處理問題的思路。
閱讀更多 修電腦的老男孩 的文章