windows 更改批处理文件中的驱动器在结束时失败

yshpjwxd  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(117)

我有以下批处理文件从我们的服务器下载备份:

  1. @echo off
  2. d:
  3. cd \DBBackups
  4. curl -u user:password https://example.com/Backups/list.php?p=anotherpassword >list.txt
  5. SETLOCAL DisableDelayedExpansion
  6. FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ list.txt"`) do (
  7. echo =========================================
  8. set "var=%%a"
  9. SETLOCAL EnableDelayedExpansion
  10. set "var=!var:*:=!"
  11. set "tmp=%%a"
  12. set "_tempvar=YesYes"
  13. if !tmp:~-3!==tar set "_tempvar=1"
  14. if !tmp:~-3!==bak set "_tempvar=1"
  15. if !_tempvar! EQU 1 (
  16. if exist !var! (
  17. echo !var! has already been downloaded
  18. ) else (
  19. echo Downloading !var!
  20. )
  21. if not exist !var! wget --no-check-certificate --user=user --password=yap https://www.example.com/Backups/!var!)
  22. )
  23. ENDLOCAL
  24. )
  25. c:
  26. echo "Drive changed!"

字符串
该文件接收一个文件列表(每行一个文件)并将它们保存到list.txt。然后读取每一行并下载文件。最后,将驱动器更改回c:失败了。
我想这可能是ERRORLEVEL被设置为大于0。因此,我尝试了here提供的解决方案,包括“cmd /c”exit /B 0”",“cd ."和“ver > nul”,但它们不起作用。最后的回声“驱动器改变了!“0打印。
欢迎任何建议。

d8tt03nd

d8tt03nd1#

由于您执行D:,然后执行cd,因此执行setlocal时的当前目录是d:\DBBackups
此目录将在批处理结束时还原(隐式endlocal)。您需要在c:之前添加endlocal命令

相关问题