知識分享002:DOS批處理命令實現自動複製指定的文件夾到其他位置

知識分享002:DOS批處理命令實現自動複製指定的文件夾到其他位置

最近再悟空問答上,有個網友提出個問題,他希望用批處理命令把硬盤中指定的文件夾,比如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

以上部分為全部批處理命令。

為了便於瞭解批處理的運行狀態,裡面會實時顯示目前的工作進展,比如搜索到第幾個,一共有幾個,是否完成複製。複製到哪裡。運行過程如下圖。

知識分享002:DOS批處理命令實現自動複製指定的文件夾到其他位置

運行結果,我這裡設置的是把文件夾複製到E盤。從下圖可以看到,每個找到的都被複制,並且按照找到的先後順序,文件夾名稱後面還增加了編號。

知識分享002:DOS批處理命令實現自動複製指定的文件夾到其他位置

本文到此結束,如果覺得我的文章對你有幫助,麻煩點個贊鼓勵一下我。

最後感謝CSDN的愛吃兔嘰的魚,他的方法給了我很提供了處理問題的思路。


分享到:


相關文章: