敲下一段感悟 2019-08-09 11:25 采纳率: 100%
浏览 307
已采纳

这是一个关于批处理关于遍历的脚本问题,求大神解决?

我现在要实现一个功能,要求使用bat批处理脚本实现。
要求:
1. 在不同的路径有两个目录例如:d:/aa 和d:/bb
1. aa目录要和bb目录进行一个遍历对比,相同的目录和相同的文件进行备份到d:/cc目录(按照同样的目录树结构),不同的目录和文件不做处理。这里需要注意的是,windos下的目录名和文件名可能中间有空格,也要进行备份。遍历时,这个会出现问题。主要是处理这个问题。
1. 备份完毕时,将d:/aa覆盖d:/bb目录。


以下是代码,代码存在的问题是遍历目录太慢,备份太耗时。
echo off & color 0A
:: backup module
set datet=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%
set "datet=%datet: =0%"

md %4\%1\%datet%
set sDIR=%2\%1
set dDIR=%3\%1
set bakDir=%4\%1\%datet%
echo :: 功能:项目上线部署文件备份
echo :: 介绍:使用最新项目文件与生产环境进行比较,对需要更新的文件进行备份操作。
echo :: 执行示例:jen_deploy 133-www.wyf.com D:\workspace D:\webfile D:\webfilesbak
echo :: 源文件夹: %sDIR%
echo :: 目标文件夹: %dDIR%
echo :: 备份文件夹: %bakDir%
echo :: 上线时间:%datet%
:: -------------------------------------------------------------
::--定义源、目标、备份文件夹
::--定义4个传数,%1:项目名 %2:源文件夹,%3:目标文件夹,%4:备份文件夹
::--定义项目名、源、目标、备份文件夹项目名.
if exist %3\%1 (
echo.目录名存在,开始执行操作
) else (
echo.目录名不存在,新建目录中....
md %3\%1
)
setlocal ENABLEDELAYEDEXPANSION ::开启环境变量扩展 特别重要
set varD=test
set varD2=test
set varS=test
set varS2=test
set varS3=test
:: 遍历源文件夹及子文件夹,并与目标文件夹的文件进行比较,对相同的文件进行备份操作。
for /R %sDIR% %%f in (*) do (
set varS=%%f
set varS2=!varS:%2\%1=!
rem echo 1: sDir=%sDir% : varS=!varS! : varS2= !varS2!
call :copyFunc %3\%1
rem echo %2
)
endlocal
echo :: 备份完成,正在上线。
::on-line module
xcopy %sDIR% %dDIR%\% /y /E /v
echo :: 上线完成

:copyFunc
for /R %dDIR% %%h in (*) do (
set varD=%%h
set varD2=!varD:%1=!
rem echo 2: dDir=%dDir% : varD=!varD! : varD2= !varD2!
if !varD2!==!varS2! (
FOR /F "delims==" %%i IN ("%bakDir%!varD2!") DO (
set varS3=%%~di%%~pi
)
rem echo print --- "%%h" "!varS3!"
xcopy "%%h" "!varS3!" /y /v
rem echo xcopy "%%h" "!varS3!" /y >>log.txt
exit /b
rem echo Backup file : %%h

) else (
rem echo No have Backup flie!
)
)
goto :eof

  • 写回答

2条回答 默认 最新

  • 敲下一段感悟 2019-08-23 15:43
    关注

    setlocal ENABLEDELAYEDEXPANSION ::去掉这个即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services