基于批处理的局域网更新软件小工具-提供源码和BUG

查看 107|回复 7
作者:rhci   
很多情况下都需要用到一台机针对多台机的文件更新,第一想法就是同步软件,开始寻找工具一堆,测试发现,都能达到要求,但是吧,软件不是要收费,就是老旧设备上卡的要死。
索性就开始想,能不能使用C/S这种最直接的方式,C随意,S,直接用WEB服务,实践来源于想法,开始干活;
[color=rgba(0, 0, 0, 0.85)]服务端用这:


image.png (20.45 KB, 下载次数: 0)
下载附件
S0
2023-3-20 20:37 上传

客户端用wget.exe



image.png (35.56 KB, 下载次数: 0)
下载附件
C0
2023-3-20 20:39 上传

经历过各种测试,最终编写BUG代码如下:
[Asm] 纯文本查看 复制代码@Echo Off&Setlocal Enabledelayedexpansion
For /f "delims=" %%i in ('curl -s "http://127.0.0.1/update.ini"') do (Set "wpwd=%%i")
@echo 000=!wpwd!
FOR /F "delims=" %%s IN (update.ini) do (Set "lpwd=%%s")
@echo 111=!lpwd!
if !wpwd!==!lpwd! (goto yes) else goto no
@pause >nul
@exit
:yes
@Del /Q *.tmp>nul |del /Q wmv>nul
@echo 无需更新
@pause >nul
@exit
@:no
@echo 正在更新
@wget -q -nv -N -r -nd -np -nH -R index.htm,index.html http://127.0.0.1
@del /Q *.tmp >nul |del /Q wmv >nul
@echo 更新已完成
@pause >nul
@cksum *.* >su.tmp
@cat su.tmp | tr -d '\r\n" "`’>update.ini
@del /Q su.tmp
@exit
这里调用curl 参数-S 去读取WEB端的校验文件,相当于FC了,文件无变化,删除临时文件并退出,校验文件有变化,启动WGET下载,这里没有用断点续传,是因为发现影音文件多次覆写同名文件,会无法播放。【这是BUG,到目前还没解决】
S端 建立 info.bat 如下
[Asm] 纯文本查看 复制代码del /Q update.ini
cksum *.* >su.tmp
cat su.tmp | tr -d '\r\n" "`’>update.ini
del /Q su.tmp
原理:服务端启动删除校验文件,依赖 cksum 生成当前目录下所有文件的 crc32值 写入临时文件并利用 cat 和 tr 删除掉临时文件中的空格和换行并生成最总的校验文件。
客户端调用CURL读取指定URL校验文件内容并对比本地校验文件,无差异,退出,有差异,启动WGET开始递归下载
这里用到了 linux转WIN的一些小工具 【unxutils】
BUG不少,目前找不到方法去修复。
1. 无法下载中文名文件
2. 文件变化小于1KB,可能更新失败
具体效果,可以自己去测,文件我打包好了,具体看附件了

下载看我.txt
(56 Bytes, 下载次数: 6)
2023-3-20 21:01 上传
点击文件名下载附件
下载积分: 吾爱币 -1 CB

文件, 下载次数

rhci
OP
  

补充下:
客户端的up.bat
最后加入
cksum *.* >su.tmp
cat su.tmp | tr -d '\r\n" "`’>update.ini
del /Q su.tmp
就是为了下次更新做比对。
simoney   

感谢楼主分享,原创辛苦
Defeat   

楼主辛苦了,感谢
zhujue   

我是过来看看的。不知道现在权限大了没有。
lee_qian   

谢谢分享!!
vec3   

看了一下unxutils,里面有打包工具tar,感觉感觉中文名有戏
johnming789   

谢谢楼主的分享!
您需要登录后才可以回帖 登录 | 立即注册

返回顶部