Board logo

标题: [系统相关] 请教关于批处理文件自我升级的代码 [打印本页]

作者: edison_zhu    时间: 2020-5-14 13:10     标题: 请教关于批处理文件自我升级的代码

1.思路
批处理运行时,检测局域网盘中的文件的日期,如果较新时,运行更新代码
2.代码内容
对比两文件创建立时间日期,COPY较新的替换旧文件,运行

问题
1.如何对比两文件
2.批处理自身运行时,如何替换自己
此时有个思路,使用延迟,在%TEMP%下结束批处理当前进程,COPY新文件到旧文件路径,结束替换进程。


思路有了,感觉有点复杂,请教了
作者: edison_zhu    时间: 2020-5-14 17:00

  1. @echo off
  2. ::获取文件路径
  3. set lj=%~dp0
  4. ::第一个文件为身
  5. set file_1="%~n0.cmd"
  6. ::第二个文件
  7. set file_2="\\192.168.3.222\t$\dls.cmd"
  8. ::调用时间对比
  9. call :smile %file_1% %file_2%
  10. pause & exit
  11. rem 判断时间
  12. :smile
  13. if "%~t1"=="%~t2" (
  14. echo 无需更新
  15. goto one
  16. ) else (
  17. echo 需要更新
  18. goto gx
  19. )
  20. :gx
  21. echo 正在更新...
  22. ren %file_1% old%file_1%
  23. copy "\\192.168.3.222\t$\dls.cmd" %lj% /y
  24. call %lj%\dls.cmd
  25. exit
  26. :one
  27. echo 文件没有更新
  28. pause
复制代码
自己写了一个,但中文路径下就失效了。。无语
作者: edison_zhu    时间: 2020-5-20 15:00

版本帮忙看看啊
上面的代码基本能用
但发现一些特殊的情况下,会出错。
比如:如果在新文件所在的文件夹运行它本身时,会产生无限循环的结果。
问题可能是不断的自我复制与替换。如何屏蔽?

还有,请把代码优化一下。有点简陋
作者: Batcher    时间: 2020-5-26 00:08

回复 3# edison_zhu


试试这样可以吗:
https://mp.weixin.qq.com/s/DixV7t8KFySKNX974u2IBw
作者: edison_zhu    时间: 2020-5-26 16:13

回复 4# Batcher


    感谢,测试中...
作者: edison_zhu    时间: 2020-5-27 09:56

回复 4# Batcher


    测试完成。基本满足所需。感谢




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2