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

 更新时间:2023年07月05日 11:35:45   投稿:mdxy-dxy  
这篇文章主要介绍了批处理复制文件时保留原目录结构的几种方法,需要的朋友可以参考下

假设待复制的文件名为 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复制文件保留目录结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论