我正在编写批处理文件来升级某些系统。我需要从xml文件中解析一个日期并将其保存以供稍后在文件中使用。日期格式为yyyy \ MM \ dd。
到目前为止我所拥有的是:
@echo off
setLocal DisableDelayedExpansion
for /f "tokens=* delims= " %%G in (ConnectionManagement.xml) do (
set str=%%G
set mydate=%%G
echo got-
echo %%G
echo %mydate%
PAUSE
ECHO %mydate%|findstr /R /C:[0-9][0-9][0-9][0-9]\\[0-9][0-9]\\[0-9][0-9] > nul
IF ERRORLEVEL 0 goto valueok
)
echo DONE
PAUSE
goto end
:valueok
echo VALUEOK
:end
PAUSE
不幸的是,这错误地将xml标头识别为有效日期;但我认为这与ErrorLevel被重置(?)有关。没有设置mydate,它将空变量mydate识别为匹配(!! ??)。输出是:
got-
<?xml version="1.0" encoding="utf-8"?>
ECHO is off.
Press any key to continue . . .
VALUEOK
Press any key to continue . . .
...
迫切需要一个解决方案。感谢...
答案 0 :(得分:10)
错误级别未被重置。实际发生的事情是IF ERRORLEVEL 0
的行为不符合您的预期。基本上,测试不是“错误级别是否等于0?”,它的“错误级别是否大于或等于零?”。鉴于此,应该清楚IF ERRORLEVEL 0
将永远是真的(至少,如果你只是期望积极的错误......)
因此,您需要使用IF NOT ERRORLEVEL 1 goto valueok
。
答案 1 :(得分:0)
正如RB写的那样,IF ERRORLEVEL 0
的行为并不像你期望的那样。
if errorlevel
是一个特殊的IF案例
要使用普通的IF构造,您可以使用
setlocal EnableDelayedExpansion
...
FOR-LOOP .. DO (
if !ERRORLEVEL! EQU 0 goto valueok