DOS批处理命令实现自动复制指定的文件夹到其他位置

时间:2022-11-03 15:17:38 

希望用批处理命令把硬盘中指定的文件夹,比如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

以上部分为全部批处理命令。

为了便于了解批处理的运行状态,里面会实时显示目前的工作进展,比如搜索到第几个,一共有几个,是否完成复制。复制到哪里。运行过程如下图。

DOS批处理命令实现自动复制指定的文件夹到其他位置

 

运行结果,我这里设置的是把文件夹复制到E盘。从下图可以看到,每个找到的都被复制,并且按照找到的先后顺序,文件夹名称后面还增加了编号。

DOS批处理命令实现自动复制指定的文件夹到其他位置

标签:DOS批处理命令
0
投稿

猜你喜欢

  • win10任务管理器系统中断是怎么回事?win10任务管理器系统中断的解决方法

    2023-08-27 10:26:28
  • 5.8 Excel VBA的对话框函数

    2023-09-29 03:16:33
  • Word如何快速批量删除图片

    2023-12-10 04:23:59
  • 中国工商银行app怎么设置指纹登陆?中国工商银行app设置指纹登陆的方法

    2023-05-19 11:34:12
  • win10玩古剑奇谭1老是无响应怎么办_win10古剑奇谭1老是无响应的解决方法

    2022-07-22 00:13:56
  • win10局域网看不到其他电脑的解决方法

    2023-12-29 18:29:03
  • u盘被写保护的常见解决方法汇总

    2023-01-18 13:25:23
  • 搜狗输入法支持搜索建议吗

    2023-04-23 16:39:08
  • 微软发布四月更新Win10正式版ISO镜像MSDN下载地址

    2023-02-25 09:13:24
  • cad中怎么自定义坐标系?cad自定义坐标系教程

    2022-12-17 03:38:58
  • Win10按Windows键没反应怎么办?win10徽标键没反应解决方法

    2023-10-20 19:13:22
  • Win10家庭版笔记本电脑怎么关闭Windows defender功能?

    2023-11-24 02:05:57
  • ​Excel如何在表格中插入图片

    2023-05-16 21:14:38
  • 滴滴打车怎么发送私密订单 滴滴打车私密订单发送方法

    2022-03-02 06:43:37
  • wegame如何不让别人看战绩?wegame隐藏战绩的方法

    2023-05-09 04:35:49
  • 被美国总统强制取消收购高通!Intel不会考虑收购博通

    2022-03-19 01:10:56
  • excel2003打印指定区域的方法

    2023-09-05 08:56:53
  • wps表格如何设置斜线表头

    2023-12-01 03:54:19
  • win10电脑一打印就蓝屏怎么彻底解决?

    2023-10-24 21:29:25
  • 微信出现零钱提现异常怎么办?微信出现零钱提现异常的解决方法

    2022-10-04 12:46:09
  • asp之家 电脑教程 m.aspxhome.com