当前位置: 代码网 > it编程>前端脚本>Dos/bat > 批处理复制文件时保留原目录结构的几种方法

批处理复制文件时保留原目录结构的几种方法

2024年05月15日 Dos/bat 我要评论
假设待复制的文件名为 7-zip.chm 位于 c:program files 目录下的某一级子文件夹下面,但是不知道具体在哪一个子文件夹或哪一级子文件夹下。需要把它复制到 e 盘相同的目录结构下面

假设待复制的文件名为 7-zip.chm 位于 c:\program files 目录下的某一级子文件夹下面,但是不知道具体在哪一个子文件夹或哪一级子文件夹下。需要把它复制到 e 盘相同的目录结构下面,以便将来需要恢复的时候可以快速找到正确的位置。

例如原来的位置是:

c:\program files\7-zip\7-zip.chm

那么就把文件复制到:

e:\program files\7-zip\

例如原来的位置是:

c:\program files\7z\docs\7-zip.chm

那么就把文件复制到:

e:\program files\7z\docs\

【方法1】直来直去的思路

先找到待复制的文件。再判断目标位置是否存在正确的目录结构,如果不存在,则新建对应的目录结构。最后把文件复制到目标文件夹。

@echo off
rem 设置待处理的文件名
set "filename=7-zip.chm"
rem 假设文件位于以下目录的某个子文件夹下
set "oldfolder=c:\program files"
rem 假设把文件复制到以下位置并保持原来的目录结构
set "newfolder=e:"
for /f "delims=" %%i in ('dir /b /s /a-d "%oldfolder%\%filename%"') do (
    for %%j in ("%oldfolder%") do (
        if not exist "%newfolder%%%~pi" (
            md "%newfolder%%%~pi"
        )
        copy "%%i" "%newfolder%%%~pi"
    )
)

【方法2】一步到位的思路

利用 xcopy 命令的特性:复制文件的时候,如果目标文件夹不存在,它可以自动创建目标文件夹结构。所以找到待复制的文件之后,直接使用 xcopy 命令复制即可。

@echo off
rem 设置待处理的文件名
set "filename=7-zip.chm"
rem 假设文件位于以下目录的某个子文件夹下
set "oldfolder=c:\program files"
rem 假设把文件复制到以下位置并保持原来的目录结构
set "newfolder=e:"
for /f "delims=" %%i in ('dir /b /s /a-d "%oldfolder%\%filename%"') do (
    xcopy "%%i" "%newfolder%%%~pi"
)

【方法3】winrar命令打包的时候带上目录结构然后再解包

命令参数作用描述
-ep从名称中排除路径
-ep1从名称中排除基本目录
-ep2展开为完整路径
-ep3扩展路径为包含盘符的完全路径
@echo off
rem 设置待处理的文件名
set "filename=7-zip.chm"
rem 假设文件位于以下目录的某个子文件夹下
set "oldfolder=c:\program files"
rem 假设把文件复制到以下位置并保持原来的目录结构
set "newfolder=e:"
for /f "delims=" %%i in ('dir /b /s /a-d "%oldfolder%\%filename%"') do (
    "c:\program files\winrar\winrar.exe" a -ibck "%temp%\www.jb51.net.zip" "%%i"
)
"c:\program files\winrar\winrar.exe" x -ibck "%temp%\www.jb51.net.zip" "%newfolder%"
del /f /q "%temp%\www.jb51.net.zip"

【方法4】7z命令打包的时候带上目录结构然后再解包

命令参数作用描述
-spf打包或解包的时候使用文件的全路径(包含盘符)
-spf2打包或解包的时候使用文件的全路径(不包含盘符)
-o设置输出目录
@echo off
rem 设置待处理的文件名
set "filename=7-zip.chm"
rem 假设文件位于以下目录的某个子文件夹下
set "oldfolder=c:\program files"
rem 假设把文件复制到以下位置并保持原来的目录结构
set "newfolder=e:"
for /f "delims=" %%i in ('dir /b /s /a-d "%oldfolder%\%filename%"') do (
    "c:\program files\7-zip\7z.exe" a -spf2 "%temp%\www.jb51.net.zip" "%%i"
)
"c:\program files\7-zip\7z.exe" x "%temp%\www.jb51.net.zip" -o"%newfolder%"
del /f /q "%temp%\www.jb51.net.zip"

到此这篇关于批处理复制文件时保留原目录结构的几种方法的文章就介绍到这了,更多相关bat复制文件保留目录结构内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com