Batch file 批处理文件:开始"&引用/W CMD/C不';似乎在foor循环中不起作用

Batch file 批处理文件:开始"&引用/W CMD/C不';似乎在foor循环中不起作用,batch-file,for-loop,cmd,wmic,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-%%

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

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 ')

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

有什么想法或建议为什么会发生这种情况

我非常感谢你的建议


提前感谢您。

将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个单引号更改为反引号…最好复制粘贴:)
有关/?

的信息,请参见将
/b
添加到start命令,将在与父命令相同的窗口中运行该命令。
因此,您可以捕获输出

FOR /F "skip=1 tokens=1-6" %%A IN ('START "" /B /wait WMIC ...
但它也应该在没有启动的情况下运行,您的系统似乎已损坏

@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

您还可以使用
临时文件

@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% : %* 
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 ...
临时文件的hextump

@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% : %* 
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 ... 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 20 32 30 31 33 20 20 20 0d 0d 0a 2013。。。
输出:

2013-11-29 15:52:59 : 2013-11-29 15:52:59 :
这似乎不起作用。我仍在日志中获取值500,而不是日历时间。您的解决方案不包含START“”,我需要一个带有START的解决方案,因为如果未使用START“”,它似乎会挂起。谢谢你的回复。是的,我理解,但是我目前工作的系统上的WMIC似乎有一些问题。即使是我的旧代码,没有开始和代码中的更改似乎工作得很好,而且它从很长时间以来一直在工作,只是我目前的系统不工作。@spaniard89我和这里的其他人无法修复你的计算机。如果工作正常,请回来。我理解你的沮丧。我更沮丧的是,在注释部分,你会发现为什么它在WMIC时挂起。@西班牙人89我知道这个问题很久了。我用第二个
for
循环删除了附加的
cr
命令。非常感谢您提供的解决方案。但是如果我在同一个窗口上运行WMIC命令,它似乎会挂起。没有使用/B还有其他方法吗?我建议先修复你的系统。否则,我只能看到将输出重定向到文件的解决方案,因为这两个窗口或多或少是独立的