我正在编写一个批处理文件来升级某些系统。我需要从 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 header 识别为有效日期;但我认为这与 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 . . .

...

对解决方案感到相当绝望。谢谢...

最佳答案

ErrorLevel 没有被重置。实际发生的是 IF ERRORLEVEL 0 的行为与您期望的不一样。基本上,测试不是“错误级别是否等于 0?”,而是“错误级别是否大于或等于零?”。鉴于此,应该清楚 IF ERRORLEVEL 0 将始终为真(至少,如果您只期望正错误......)

因此,您需要改用 IF NOT ERRORLEVEL 1 goto valueok

关于batch-file - 批处理文件 ErrorLevel 问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5702760/

10-12 06:09