Board logo

标题: [文件操作] 【已解决】批处理+wget文件处理问题 [打印本页]

作者: 447219071    时间: 2023-7-15 22:35     标题: 【已解决】批处理+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空文件,导致后面的命令全部失效
目的:如不存在,执行下载命令,在多个下载地址中自更新下载文本文件,如第一个失效,则用第二个下载,第二个不行就用第三个
望高手,大大们指教,谢谢
作者: dimo    时间: 2023-7-16 00:06

首先可以试试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,下载失败
复制代码
检测到下载失败再进行下一个地址下载。
作者: 447219071    时间: 2023-7-16 08:28

回复 2# dimo
用环境变量似乎行得通,我是小白,麻烦高手展示一下,谢谢
作者: 77七    时间: 2023-7-16 09:33

  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
复制代码

作者: 77七    时间: 2023-7-16 09:55

不怎么用wget ,可以试试aria2c (需要下载安装),下载失败不会产生空文件,也不用加等待命令
作者: 447219071    时间: 2023-7-16 10:06

回复 5# 77七


    能否检测文件是否最新吗?这个下载软件?谢谢
作者: 77七    时间: 2023-7-16 10:13

回复 6# 447219071


   “最新”是根据什么判断?
作者: 447219071    时间: 2023-7-16 10:32

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

回复 7# 77七


    本地电脑的B.TXT文件的创建日期,如果网上的更新则替换,否则不执行,WGET有这个参数  -N
作者: 77七    时间: 2023-7-16 10:59

回复 8# 447219071


   我不是很明白这个,既然wget自带了,是不是不用1楼或者4楼的 if exist 判断本地是否存在?
作者: 447219071    时间: 2023-7-16 11:09

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

回复 9# 77七


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

回复 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
复制代码





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