发布时间: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盘。从下图可以看到,每个找到的都被复制,并且按照找到的先后顺序,文件夹名称后面还增加了编号。 |
上一篇: