2016-09-29 62 views
0

試圖要通過列表(list.txt)這個批處理文件循環使用xml.exe可以在這裏報到了文件中的號碼: 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 

我看到它映射驅動器,但它不會在所有機器上運行腳本。

---編輯---

這是嵌套循環?

@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 *** 
******************************************************** 
+0

您需要嵌套你的命令。 – Squashman

+0

編輯帖子。看起來有點進一步,但是現在抱怨什麼? –

+0

您位於代碼塊內,因此您需要對所有環境變量使用延遲擴展。例如:%DATA%到!DATA! – Squashman

回答

0

隨着Squashman的幫助下,我有一個答案!

@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