批处理文件:START“”/ W CMD / C似乎在for循环中不起作用

时间:2013-11-29 13:49:40

标签: batch-file for-loop cmd wmic

我有一个批处理文件,其内容是:

SETLOCAL enabledelayedexpansion
SET /A FT=500
FOR /F "skip=1 tokens=1-6" %%A IN ('START "" /wait WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year
/Format:table ') DO (
 IF NOT !FT!==500 GOTO proceed
 SET  FD=%%F-%%D-%%A
 SET  FT=%%B:%%C:%%E
:proceed
 SET /A FX="DS"
)
echo %FD% %FT% : %* >> "%LOGFILE%"

endlocal

最初的行

FOR /F "skip=1 tokens=1-6" %%A IN ('START "" /wait WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year
    /Format:table ')

FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year
    /Format:table ')

但是由于在批处理中运行WMIC命令导致进程挂起,因此我想在新的CMD窗口上运行WMIC命令,这似乎解决了挂起问题,但现在运行WMIC命令的子窗口的内容未传递给父窗口。 (即)日志文件的输出只是“500”(FT的值),而不是For循环中内部更改的FT值,由于某种原因它只是跳过for循环。

为什么会出现这种情况的任何想法或建议?

我真的很感激任何建议。

提前感谢。

3 个答案:

答案 0 :(得分:2)

@ECHO OFF &SETLOCAL
SET /A FT=500
FOR /F "delims=" %%x IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,SEcond^,Year /Format:table ^|find "20"') DO (
    for /f "tokens=1-6" %%A in ("%%~x") do (
        IF NOT %FT%==500 GOTO proceed
        SET "FD=%%F-%%D-%%A"
        SET "FT=%%B:%%C:%%E"
        :proceed
        SET /A FX="DS"
    )
)
echo %FD% %FT% : %* 

endlocal

您还可以使用Tempfile

@ECHO OFF &SETLOCAL
set "Tempfile=%TEMP%\%random%.~"
WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,SEcond,Year|find "20">"%Tempfile%"
SET /A FT=500
for /f "usebackqtokens=1-6" %%A in ("%Tempfile%") do (
    IF NOT %FT%==500 GOTO proceed
    SET "FD=%%F-%%D-%%A"
    SET "FT=%%B:%%C:%%E"
    :proceed
    SET /A FX="DS"
)
del "%Tempfile%"
echo %FD% %FT% : %* 

Tempfile

的Hexdump
0000000: 32 39 20 20 20 31 37 20 20 20 20 30 20 20 20 20  29   17    0
0000010: 20 20 20 31 31 20 20 20 20 20 33 39 20 20 20 20     11     39
0000020: 20 20 32 30 31 33 20 20 0d 0d 0a                   2013  ...

输出:

2013-11-29 15:52:59 :

答案 1 :(得分:1)

/b添加到start命令,将在与父项相同的窗口中运行它 所以你可以捕获输出。

FOR /F "skip=1 tokens=1-6" %%A IN ('START "" /B /wait WMIC ...

但它也应该在没有START的情况下运行,你的系统似乎已被打破。

答案 2 :(得分:0)

将FOR行更改为:

FOR /F "usebackq skip=1 tokens=1-6" %%A IN (`START "" /wait WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year

/格式:表格`)DO(

请注意,我添加了usebackq,然后将2个单引号更改为引号...最好复制粘贴:) 见FOR /?