从cmd解析数据

时间:2015-04-07 19:11:19

标签: windows batch-file cmd batch-processing

我一直试图使用"净时间"实用程序,以便在网络上获取另一台机器的时间(由于各种原因,我无法使用现有的Windows服务)。它正在获取正确的数据,但未正确保存到变量。我已经编写了一些代码,显示了我遇到的情况。

::@ECHO off

for /f "tokens=1-2,6,7,8" %%i in ('net time \\A13027-07T9') do (
if "%%i %%j"=="Current time"( set d=%%k set t=%%l set AP=%%m)   
)

echo %d%
echo %t%
echo %AP%

PAUSE

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

过滤数据有助于:

for /f "tokens=1-2,6,7,8" %%i in ('net time \\A13027-07T9^|find "Current time"') do (

完整的工作脚本(适用于我的德语窗口):

@echo off
for /f "tokens=1-2,6,7,8" %%i in ('net time \\AkoyaD^|find "Aktuelle Zeit"') do (
    set d=%%k 
    set t=%%l 
    set AP=%%m
)
echo %d%
echo %t%
echo %AP%
PAUSE

给了我:

07.04.2015
21:43:54.
ECHO ist ausgeschaltet (OFF).
Drücken Sie eine beliebige Taste . . .
" Echo ist ausgeschaltet"是的,因为在德国时间,没有AM / PM。

答案 1 :(得分:2)

问题是你试图将3 set个命令塞进一行。您需要将它们与&分开,或者将它们放在各自的行上。

正如Stephan指出的那样,使用find可以让您的代码看起来更清晰。

无论如何,正确的缩进和代码格式化有助于避免像这样的简单错误。

@ECHO off
setlocal

for /f "tokens=6-8" %%i in ('net time \\A13027-07T9 ^| find "Current"') do (
    set "d=%%i"
    set "t=%%j"
    set "AP=%%k"
)

echo %d%
echo %t%
echo %AP%

PAUSE

或者如果您不想使用find并希望将set放在同一行:

@ECHO off
setlocal

for /f "tokens=1-2,6-8" %%i in ('net time \\A13027-07T9') do (
    if /i "%%i %%j"=="Current time" ( set "d=%%k" & set "t=%%l" & set "AP=%%m" )
)

echo %d%
echo %t%
echo %AP%

PAUSE

就个人而言,我发现第一个版本更具可读性。