生产环境下Windows批处理脚本实现目录创建与跨目录文件复制问题
批量复制文件的批处理脚本问题及解决
需求说明
- 获取用户输入的父文件夹路径与子文件夹路径,分别存入变量:
- 父路径:
D:\UK\UK0623\Path - 子路径:
D:\UK\UK0723\Path
- 父路径:
- 从父路径中提取并保存第一个子文件夹名称为TEMP变量(示例:
D:\UK\UK0623\Path\Temp_Variable) - 遍历TEMP变量下的大量序列号文件夹(如
SNO_01、SNO_02等) - 进入
父路径+TEMP变量+\Original目录,复制其中的文件 - 在
子路径+TEMP变量路径下创建Reissue目录,并将复制的文件粘贴到该目录中
注意:生产环境中有上百个此类序列号文件夹,
Reissue目录需为每个序列号文件夹实时创建。
错误脚本及问题
第一次尝试的脚本
@echo off setlocal enabledelayedexpansion pushd D:\Uk SET CURRENT_DIR=%cd% SET PARENT_DIR=%CURRENT_DIR%\UKRR_0623 SET CHILD_DIR=%CURRENT_DIR%\UKRR_0723 SET TEMP_VAR=SNO_01 echo %CURRENT_DIR% echo %PARENT_DIR% echo %CHILD_DIR% for %%i in ("%CURRENT_DIR%\UKRR_0623\%TEMP_VAR%\Original*.*") do ( copy "%%i" "%CURRENT_DIR%\UKRR_0723\%TEMP_VAR%\Reissue") echo backup completed pause
问题:出现目录路径语法错误。
第二次尝试的脚本
@echo off setlocal enabledelayedexpansion pushd D:\Uk SET CURRENT_DIR=%cd% SET PARENT_DIR=%CURRENT_DIR%\UKRR_0623 SET CHILD_DIR=%CURRENT_DIR%\UKRR_0723 SET TEMP_VARS=SNO_01 SNO_02 for %%i in (%TEMP_VARS%) do ( xcopy /s "%PARENT_DIR%\%TEMP_VARS%\Original\*.*" "%CHILD_DIR%\%TEMP_VARS%\Reissue" ) pause
错误信息:
D:\Uk>(xcopy /s "D:\Uk\UKRR_0623\SNO_01 SNO_02\Original*.*" "D:\Uk\UKRR_0723\SNO_01 SNO_02\Reissue" ) 文件未找到 - *.* 已复制 0 个文件
问题核心:循环中错误使用了%TEMP_VARS%而非循环变量%%i,导致路径中包含所有序列号文件夹名称,形成无效路径。
修正后的脚本
@echo off setlocal enabledelayedexpansion :: 获取用户输入的父路径和子路径 set /p PARENT_DIR=请输入父文件夹路径: set /p CHILD_DIR=请输入子文件夹路径: :: 提取父路径下的第一个子文件夹作为TEMP变量 for /d %%d in ("%PARENT_DIR%\*") do ( set TEMP_VAR=%%~nxd goto :found_temp_var ) :found_temp_var :: 遍历TEMP_VAR下的所有序列号文件夹 for /d %%s in ("%PARENT_DIR%\%TEMP_VAR%\*") do ( set "SNO_FOLDER=%%~nxs" :: 定义源路径和目标路径 set "SOURCE_PATH=%PARENT_DIR%\%TEMP_VAR%\!SNO_FOLDER!\Original\" set "TARGET_PATH=%CHILD_DIR%\%TEMP_VAR%\!SNO_FOLDER!\Reissue\" :: 创建目标Reissue目录 if not exist "!TARGET_PATH!" mkdir "!TARGET_PATH!" :: 复制文件(/Y 覆盖已存在文件,/E 复制子目录及空目录) xcopy /Y /E "!SOURCE_PATH!*.*" "!TARGET_PATH!" ) echo 文件复制完成! pause
脚本说明
- 使用
set /p获取用户输入的父、子路径,满足需求第一步 - 通过
for /d遍历父路径下的第一个子文件夹,提取其名称作为TEMP_VAR - 再次使用
for /d遍历TEMP_VAR下的所有序列号文件夹 - 自动为每个序列号文件夹创建对应的
Reissue目录,无需手动操作 - 启用延迟变量扩展(
!变量!)确保循环中变量值正确更新 xcopy参数/Y自动覆盖已存在文件,/E复制所有子目录,可根据实际需求调整
内容的提问来源于stack exchange,提问作者Antony Prince Peter
相关产品推荐
相关产品推荐

