找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21200|回复: 5

[系统相关] 请教关于批处理文件自我升级的代码

[复制链接]
发表于 2020-5-14 13:10:47 | 显示全部楼层 |阅读模式
1.思路
批处理运行时,检测局域网盘中的文件的日期,如果较新时,运行更新代码
2.代码内容
对比两文件创建立时间日期,COPY较新的替换旧文件,运行

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


思路有了,感觉有点复杂,请教了
 楼主| 发表于 2020-5-14 17:00:07 | 显示全部楼层
  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
复制代码
自己写了一个,但中文路径下就失效了。。无语
 楼主| 发表于 2020-5-20 15:00:59 | 显示全部楼层
版本帮忙看看啊
上面的代码基本能用
但发现一些特殊的情况下,会出错。
比如:如果在新文件所在的文件夹运行它本身时,会产生无限循环的结果。
问题可能是不断的自我复制与替换。如何屏蔽?

还有,请把代码优化一下。有点简陋
发表于 2020-5-26 00:08:39 | 显示全部楼层
回复 3# edison_zhu


试试这样可以吗:
https://mp.weixin.qq.com/s/DixV7t8KFySKNX974u2IBw
 楼主| 发表于 2020-5-26 16:13:34 | 显示全部楼层
回复 4# Batcher


    感谢,测试中...
 楼主| 发表于 2020-5-27 09:56:39 | 显示全部楼层
回复 4# Batcher


    测试完成。基本满足所需。感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 21:15 , Processed in 0.012175 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表