• bat 复制文件夹到另一目录(仅复制目录结构、复制目录及文件、删除空文件夹)


    bat批处理复制指定目录及子目录文件夹树结构

     仅仅复制目录结构,不复制任何文件。保存以下内容到cef.bat文件

    @echo off
    
    :mkdir
    setlocal enabledelayedexpansion
    if [%2]==[] (echo [%time%] The destination folder is null. & goto :eof)
    
    for /d %%a in (%1*) do (
    set p=%%a
    set p=!p:."=.."!
    
    echo exec md "%2!p!"
    md "%2!p!" 
    call :mkdir "!p!" %2
    )
    endlocal

    执行方式,如:cef "" c: mp

    优化1

    根据上面的代码,再次优化,可以指定复制层数

    @echo off
    cls
    echo [%time%] copy empty folder
    rem pLevel可设置复制几层文件夹
    set pLevel=2
    
    :mkdir
    setlocal enabledelayedexpansion
    if [%2]==[] (echo [%time%] The destination folder is null. & goto :eof)
    set fp=%1
    set fp=%fp: =% 
    set fp=%fp:"=% 
    set fp=%fp:= %
    set pCount=0
    for %%i in (%fp%) do set /a pCount+=1
    if %pCount% GEQ %pLevel% goto :eof
    
    for /d %%a in (%1*) do (
    set p=%%a
    set p=!p:."=.."!
    
    echo exec md "%2!p!"
    md "%2!p!" 
    call :mkdir "!p!" %2
    )
    endlocal

    调用方式,如:cef "" c: mp3   或者  cef "c: mp1" c: mp3

    优化2

    不使用递归调用,只使用一层循环

    @echo off
    cls
    
    if [%2]==[] (echo [%time%] The destination folder is null. & goto :eof)
    set dest=%2
    set dest="%dest%" & set dest=%dest:"=%
    if "%dest:~-1%" neq "" (set dest=%dest%)
    set sour=%1
    set sour="%sour%" & set sour=%sour:"=%
    if "%sour%"=="" set sour=%cd%
    if "%sour:~-1%" neq "" (set sour=%sour%)
    
    setlocal enabledelayedexpansion
    for /f "tokens=*" %%i in ('dir /s /b /ad "%sour%"') do (
    ::for /r %sour% %%i in (.) do (
      set p=%%i
      set p=!p:%sour%=!&set p=!p:.=!
      echo exec md "%dest%!p!"
      md "%dest%!p!"
      echo.
    )
    endlocal

     执行方式,如:cef "" c: mp3   或者  cef "c: mp1" c: mp3

     参考:https://bbs.csdn.net/topics/370122833

    使用xcopy复制目录结构

    示例:复制当前目录结构及子目录到上层目录的t1文件夹中

    xcopy %cd% ..	1 /C /E /K /T /Y

    另外在给几个参考:

    例如A目录下里有A1,A2,A3文件夹再分别有其余子目录,复制到B目录下的时候也需要存在A1,A2,A3文件夹及其余子目录,保留目录结构,目录里的文件在对应的目录下。
    A:A1a2 ew.txt
    复制后:
    B:A1a2 ew.txt

    1)仅复制以A为开头的目录结构

    xcopy c:xxxaA? d:yyy /C /E /K /T /Y

    2)复制以A为开头的目录结构及文件:
    xcopy c:xxxaA? d:yyy /C /E /H /K /R /Y

    参考:https://bbs.csdn.net/topics/392055120

    =======================================================================================

    bat批处理递归删除当前及子目录中的空文件夹

    将以下代码复制保存至def.bat文件中,直接双击运行即可(不推荐使用)

    @echo off
    :deldir
    setlocal enabledelayedexpansion
    for /d %%a in (%1*) do (
    set p="%%a"
    set p=!p:."=.."!
    rd !p! || ( call :deldir !p! & rd !p! )
    )

    出处:https://www.cnblogs.com/hhddd-1024/p/14275097.html

    优化:必须指定目标文件夹参数,调用方式:def.bat  "c: mp"

    @echo off
    cls
    :deldir
    setlocal enabledelayedexpansion
    if [%1] equ [] echo 未指定文件夹 & goto :eof
    set fp=%1
    set fp="%fp%" & set fp=%fp:"=%
    if "%fp%" neq "" if "%fp:~-1%" neq "" set fp=%fp%
    set fp="%fp%"
    for /d %%a in (%fp%*) do (
    set p="%%a"
    set p=!p:."=.."!
    rd !p! || ( call :deldir !p! & rd !p!)
    )

    =======================================================================================

     

    您的资助是我最大的动力!
    金额随意,欢迎来赏!
    款后有任何问题请给我留言。

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我。(●'◡'●)

    如果你觉得本篇文章对你有所帮助,请给予我更多的鼓励,求打             付款后有任何问题请给我留言!!!

    因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【Jack_孟】!

  • 相关阅读:
    Spring 定时任务 @Scheduled cron表达式
    github 获取生成 token 的方法
    jQuery 获取当前日期及前一周或者后一周的日期
    jQuery 复选框 checkbox 取值和赋值
    git clone前后端项目之后的配置操作(一定不要忘记)
    springboo的postman后端接口测试流程详解
    Navicat Premium 15 永久破解激活工具及安装教程(亲测可用)
    企业微信的单点登录适配
    git的可视化和命令行操作步骤
    CMD中键入javac显示 javac不是内部或者外部命令
  • 原文地址:https://www.cnblogs.com/mq0036/p/14620685.html
Copyright © 2020-2023  润新知