[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 【已解决】批处理+wget文件处理问题

本帖最后由 447219071 于 2023-7-19 21:29 编辑
  1. if not exist B.txt wget.exe -q -t 1 -O B.txt -N http://www.a.com/B.txt    ::下载最新版B.TXT,如果电脑上的B.TXT文件更新,不下载不替换
  2. ping -n 3 127.0.0.1>nul     ::等三秒钟让上一条命令执行下载完,不然依然查不到已经下载好B.TXT
  3. if not exist B.txt (wget.exe -q -t 1 -O B.txt -N http://www.b.com/B.txt) else (goto bed)    ::检查是否存在B.TXT,不存在则执行该条命令
  4. ping -n 3 127.0.0.1>nul     ::再等三秒钟让上一条命令执行下载完,不然依然查不到已经下载好B.TXT,解决如第一个网址下载的文件没有或打不开,进行该条命令补充下载
  5. if not exist B.txt (wget.exe -q -t 1 -O B.txt -N http://www.c.com/B.txt) else (goto bed)     ::检查是否存在B.TXT,不存在则执行该条命令
  6. b.txt
  7. :bed
  8. echo 。。。OK
复制代码
上述代码看似没问题,但一旦前面的网站打不开或无B.TXT时就会自动生成一个B.TXT空文件,导致后面的命令全部失效
目的:如不存在,执行下载命令,在多个下载地址中自更新下载文本文件,如第一个失效,则用第二个下载,第二个不行就用第三个
望高手,大大们指教,谢谢
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

首先可以试试errorlevel,看一下wget能否给出一个errorlevel(套在if里是否需要延迟扩展?)
如果能判断errorlevel就简单很多。
另外可以对b.txt增加判定条件,比如在b.txt存在的前提下,再检查B的大小:
  1. for /f "delims=" %%i in ("b.txt") do if %%~zi EQU 0 echo b.txt大小为0,下载失败
复制代码
检测到下载失败再进行下一个地址下载。
Hope is a sad thing.
https://nsdimo.gitee.io/

TOP

回复 2# dimo
用环境变量似乎行得通,我是小白,麻烦高手展示一下,谢谢

TOP

  1. @echo off
  2. if not exist "B.txt" (
  3. for %%a in (
  4. http://www.a.com/B.txt
  5. http://www.b.com/B.txt
  6. http://www.c.com/B.txt
  7. ) do (
  8. wget.exe -q -t 1 -O "B.txt" -N %%a
  9. timeout 3 1>nul
  10. find /v "" <"B.txt" 1>nul 2>nul && goto :bed
  11. del "B.txt" 2>nul
  12. )
  13. ) else (
  14. goto :bed
  15. )
  16. echo fail
  17. pause & exit
  18. :bed
  19. echo ok
  20. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

不怎么用wget ,可以试试aria2c (需要下载安装),下载失败不会产生空文件,也不用加等待命令
bat小白,请多指教!谢谢!

TOP

回复 5# 77七


    能否检测文件是否最新吗?这个下载软件?谢谢

TOP

回复 6# 447219071


   “最新”是根据什么判断?
bat小白,请多指教!谢谢!

TOP

本帖最后由 447219071 于 2023-7-16 10:33 编辑

回复 7# 77七


    本地电脑的B.TXT文件的创建日期,如果网上的更新则替换,否则不执行,WGET有这个参数  -N

TOP

回复 8# 447219071


   我不是很明白这个,既然wget自带了,是不是不用1楼或者4楼的 if exist 判断本地是否存在?
bat小白,请多指教!谢谢!

TOP

本帖最后由 447219071 于 2023-7-16 11:19 编辑

回复 9# 77七


    对哦,确实不必查询是否存在,-N应该是文件修改日期,我说错了
如果aria2c能有比较文件修改日期的参数就完美了,看样子只能用WGET加参数 -N配合等下载下来再比较以决定是否替换了

TOP

回复 3# 447219071
  1. wget.exe -q -t 1 -O B.txt -N http://www.a.com/B.txt
  2. if errorlevel 1 (
  3.     wget.exe -q -t 1 -O B.txt -N http://www.b.com/B.txt
  4.     if errorlevel 1 (
  5.         wget.exe -q -t 1 -O B.txt -N http://www.c.com/B.txt
  6.     )
  7. )
  8. find /v "" < B.txt 1>nul 2>&1
  9. if errorlevel 1 (
  10.     echo 下载失败
  11.     goto :End
  12. ) else (
  13.     goto :bed
  14. )
  15. :bed
  16. echo 。。。OK
  17. :End
  18. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表