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