Windows批处理循环未完成 [英] windows batch loop not completing

查看:132
本文介绍了Windows批处理循环未完成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使此批处理文件在列表(list.txt)中循环,并使用xml.exe从文件中报告一个编号,该编号可从此处获得: http://xmlstar.sourceforge.net/

Attempting to have this batch file loop through a list (list.txt) and report back a number from the file using xml.exe available here: http://xmlstar.sourceforge.net/

文件:

@echo off

SET USER_NAME=registereduser
SET PASSWORD=secret
SET LIST=list.txt
SETLOCAL EnableDelayedExpansion EnableExtensions

net use * /del /yes > null

FOR /F %%A in ('TYPE "%LIST%"') do (
    NET USE * \\%%A\c$ /user:%USER_NAME% %PASSWORD% > null
    SET DATA=\\%%A\c$\directory here\file.xml
)
SET A_NUM=
FOR /F %%I IN ('bin\xml sel -t -v "//Editable[@name='MachineID.SerialNumber']/@default" "%DATA%"') DO (SET A_NUM=%%I)

IF "%A_NUM%" == "" (
    ECHO ********************************************************
    ECHO *** ERROR : CAN'T CONNECT ***
    ECHO ********************************************************
    GOTO END
) ELSE (
    ECHO A NUMBER FOUND : %A_NUM%
    ECHO.
)

结果:

A  NUMBER FOUND : 5300

预期结果:

A NUMBER FOUND : 5300
A NUMBER FOUND : 4100
A NUMBER FOUND : 2600

我看到它映射了驱动器,但是它并没有在所有机器上运行脚本.

I see it mapping the drives but it doesn't run the script on all the machines.

-编辑---

这是嵌套循环吗?

@echo off

SET USER_NAME=registereduser
SET PASSWORD=secret
SET LIST=list.txt
SETLOCAL EnableDelayedExpansion EnableExtensions

net use * /del /yes > null

FOR /F %%A in ('TYPE "%LIST%"') do (
    NET USE * \\%%A\c$ /user:%USER_NAME% %PASSWORD% > null
    SET DATA=\\%%A\c$\directory here\file.xml

    SET A_NUM=
    FOR /F %%I IN ('bin\xml sel -t -v "//Editable[@name='MachineID.SerialNumber']/@default" "%DATA%"') DO (SET A_NUM=%%I)

    IF "%A_NUM%" == "" (
        ECHO ********************************************************
        ECHO *** ERROR : CAN'T CONNECT ***
        ECHO ********************************************************
        GOTO END
    ) ELSE (
        ECHO A NUMBER FOUND : %A_NUM%
        ECHO.
    )
)

错误:

> .\anumber2.bat
failed to load external entity ""
********************************************************
*** ERROR : CAN'T CONNECT ***
********************************************************
The system cannot find the batch label specified - END
failed to load external entity ""
********************************************************
*** ERROR : CAN'T CONNECT ***
********************************************************

推荐答案

在Squashman的帮助下,我有了答案!

With the help of Squashman, I have an answer!

@echo off

SET USER_NAME=registereduser
SET PASSWORD=secret
SET LIST=list.txt
SETLOCAL EnableDelayedExpansion EnableExtensions

net use * /del /yes > null

FOR /F %%A in ('TYPE "%LIST%"') do (
    NET USE * \\%%A\c$ /user:%USER_NAME% %PASSWORD% > nul
    SET DATA=\\%%A\c$\directory here\file.xml

    SET A_NUM=
    FOR /F %%I IN ('bin\xml sel -t -v "//Editable[@name='MachineID.SerialNumber']/@default" "!DATA!"') DO (SET A_NUM=%%I)

    IF "!A_NUM!" == "" (
        ECHO ********************************************************
        ECHO *** ERROR : CAN'T CONNECT ***
        ECHO ********************************************************
        GOTO END
    ) ELSE (
        ECHO A NUMBER FOUND : !A_NUM!
        ECHO.
    )
)

结果:

> .\anumber2.bat
A NUMBER FOUND : 4100

A NUMBER FOUND : 5300

这篇关于Windows批处理循环未完成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆