如何编写批处理程序复制带100后缀的嵌套文件夹及全部文件
批量复制深层嵌套的*100文件夹及内部内容
原代码的问题在于xcopy "\\xx.xx.xx.xx\live_projects\PWD\*100" %PWD_drive_100%仅匹配顶层目录中以100结尾的文件或文件夹,且当存在匹配的文件时,xcopy会优先处理文件,导致深层嵌套的*100文件夹未被正确复制。
修正后的批处理代码
@echo off :: 格式化时间变量,避免小时位为单数字时出现空格 set hour=%time:~0,2% if "%hour:~0,1%"==" " set hour=0%time:~1,1% :: 定义备份目标路径 set PWD_drive_100=E:\PWD_BACKUP_\PWD_100_%date:~10,4%_%date:~4,2%_%date:~7,2%_%hour%_%time:~3,2% :: 创建目标根目录(如果不存在) if not exist "%PWD_drive_100%" mkdir "%PWD_drive_100%" :: 递归遍历源路径下所有以100结尾的文件夹 for /r "\\xx.xx.xx.xx\live_projects\PWD" %%d in (*100) do ( :: 判断当前遍历项是否为文件夹 if exist "%%d\" ( :: 提取源文件夹相对路径,保留目录结构 set "rel_path=%%~pd" setlocal enabledelayedexpansion set "rel_path=!rel_path:\\xx.xx.xx.xx\live_projects\PWD\=!" :: 创建对应目标子目录(忽略已存在的报错) mkdir "%PWD_drive_100%\!rel_path!" 2>nul :: 复制当前*100文件夹内的所有内容到目标路径 xcopy /s /c /e /h /i /r /y "%%d\*" "%PWD_drive_100%\!rel_path!%%~nxd\" endlocal ) ) echo 备份完成 pause
关键说明
for /r "\\xx.xx.xx.xx\live_projects\PWD" %%d in (*100):递归遍历源路径下所有以100结尾的项目(文件和文件夹)if exist "%%d\":仅筛选处理文件夹(文件夹路径末尾会自动带反斜杠,文件则不会)- 延迟变量扩展(
enabledelayedexpansion):解决循环中路径变量的动态解析问题,确保相对路径正确提取 xcopy /s /c /e /h /i /r /y:完整复制文件夹内所有内容,包含子目录和隐藏文件,自动创建目标文件夹
内容的提问来源于stack exchange,提问作者UIsa
相关产品推荐
相关产品推荐

