所以,我现在如何完成它是因为它调用另一个bat文件来更新它,然后该批处理文件更新,并将%ERRORLEVEL%设置为1.在原始程序的开头,它检查errorlevel是否为1,如果是,则进入主菜单,但是现在,它不会调用更新文件,只是进入菜单。这是我的代码
主程序
IF %errorlevel% EQU 1 goto begin
call updater.bat
:begin
echo MENU
更新
set=errorlevel 1
wget (updatelink here)
call mainprogram.bat
现在,有时候它有效,有时它没有,这让我相信某些命令以某种方式增加了错误级别,但错误级别检查之前的唯一代码是
@echo off
color 0f
cls
set currentver=v0.5.6
(check code)IF %errorlevel% EQU 1 goto begin
https://code.google.com/p/flashcart-helper/source/browse/trunk/0.6/FlashcartHelperRobocopy.bat 这就是我现在所拥有的。
答案 0 :(得分:4)
不要使用errorlevel。这是一个内部变量。在批处理开始时,errorlevel将为0,因为您所做的就是设置局部变量。这几乎总是(从不说永远不会)成功。另外,如果errorlevel为1,并且我正确地读了这个,你似乎也有一个无限循环?据我所知,你所说的批次是这样的:
主要强>
@echo off
color 0f
cls
set currentver=v0.5.6
IF %errorlevel% EQU 1 goto begin
call updater.bat
:begin
echo MENU
<强>更新强>
set=errorlevel 1
wget (updatelink here)
call mainprogram.bat
因为每次你做任何事情都会覆盖错误级别,所以你会遇到麻烦。将%errorlevel%
更改为%error%
,它应该可以解决您的问题。因为它是本地环境变量,所以它也应该在批处理文件之间传递。小心不要在其他地方使用错误。
答案 1 :(得分:1)
这是使用Dropbox公共文件夹而没有wget的解决方案。它使用Winhell +机器上的PowerShell。 使用您自己的网址更新以下https://dl.dropboxusercontent.com/u/12345678/网址。
自动创建.conf文件以进行配置。 将drop_box上的文件的__deploy_mode设置为1,以便更新版本文件,但不会意外执行脚本。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET time_start=%time%
SET time_choice_wait=20
SET script_ver=1.00
SET script_name=%~n0
SET server_url=https://dl.dropboxusercontent.com/u/12345678/
SET script_name_bat=%~dp0%script_name%.bat
SET script_name_cfg=%~dp0%script_name%.conf
SET script_name_latest_ver=%~dp0%script_name%.latest.ver
ECHO %script_name% v%script_ver%
ECHO %script_ver% > %script_name%.current.ver
IF NOT EXIST "%script_name_cfg%" CALL :SCRIPT_MISSING_CFG
FOR /f "delims=" %%x IN (%script_name%.conf) DO (SET "%%x")
IF %__deploy_mode% EQU 1 GOTO :EOF
IF %auto_update_compare% EQU 1 CALL :SCRIPT_COMPARE_VER
:SCRIPT_MAIN
REM =======================================
REM === EDIT BELOW THIS LINE ==
REM TODO Add main content
ECHO.
ECHO Waiting for content...
REM === EDIT ABOVE THIS LINE ==
REM =======================================
GOTO END
:SCRIPT_MISSING_CFG
ECHO Creating new %script_name%.conf file...
ECHO __deploy_mode=0 > "%script_name_cfg%"
ECHO repository_base_url=%server_url% >> "%script_name_cfg%"
ECHO auto_update_compare=1 >> "%script_name_cfg%"
ECHO auto_update_download=1 >> "%script_name_cfg%"
ECHO Update %script_name%.conf as needed, then save and close to continue.
ECHO Waiting for notepad to close...
NOTEPAD "%script_name_cfg%"
GOTO :EOF
:SCRIPT_COMPARE_VER
ECHO Please wait while script versions are compared...
Powershell -command "& { (New-Object Net.WebClient).DownloadFile('%server_url%%script_name%.current.ver', '%script_name_latest_ver%') }"
IF NOT EXIST "%script_name_latest_ver%" GOTO END
SET /p script_latest_ver= < "%script_name_latest_ver%"
IF %script_ver% EQU %script_latest_ver% CALL :SCRIPT_COMPARE_VER_SAME
IF %script_ver% NEQ %script_latest_ver% CALL :SCRIPT_COMPARE_VER_DIFF
GOTO :EOF
:SCRIPT_COMPARE_VER_SAME
ECHO Versions are both %script_name% v%script_ver%
GOTO :EOF
:SCRIPT_COMPARE_VER_DIFF
ECHO Current Version:%script_ver% ^| Server Version:%script_latest_ver%
IF %auto_update_download% EQU 1 GOTO SCRIPT_DOWNLOAD_SCRIPT
ECHO.
ECHO Would you like to download the latest %script_name% v%script_latest_ver%?
ECHO Defaulting to N in %time_choice_wait% seconds...
CHOICE /C YN /T %time_choice_wait% /D N
IF ERRORLEVEL 2 GOTO SCRIPT_DOWNLOAD_NOTHING
IF ERRORLEVEL 1 GOTO SCRIPT_DOWNLOAD_SCRIPT
IF ERRORLEVEL 0 GOTO SCRIPT_DOWNLOAD_NOTHING
:SCRIPT_DOWNLOAD_SCRIPT
ECHO Please wait while script downloads...
Powershell -command "& { (New-Object Net.WebClient).DownloadFile('%server_url%%script_name%.bat', '%script_name_bat%') }"
ECHO Script Updated to v%script_latest_ver%^^!
REM User must exit script. Current batch is stale.
GOTO :END
:SCRIPT_DOWNLOAD_NOTHING
GOTO :EOF
:END
SET time_end=%time%
ECHO.
ECHO Script started:%time_start%
ECHO Script ended :%time_end%
:END_AGAIN
pause
ECHO.
ECHO Please close this window
ECHO.
GOTO END_AGAIN
答案 2 :(得分:0)
您可以通过以下步骤完成此操作:
1.输出服务器中的两个文件,一个配置文件,一个需要更新的更高版本的bat文件;设置最后版本号。在配置文件中。
2.应在每次启动时检查更新客户端。您可以在服务器配置文件中阅读新闻版本,然后与本地bat文件版本进行比较。如果不相等,那么更新,否则其他明智。
你有什么问题吗?