我有一个批处理文件,其内容是:
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循环。
为什么会出现这种情况的任何想法或建议?
我真的很感激任何建议。
提前感谢。
答案 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
:
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 /?