从cmdparsing数据

我一直在试图使用“净时间”实用工具,以获得另一台机器在networking上的时间(我不能使用现有的Windows服务,由于各种原因)。 它正在获取正确的数据,但没有正确保存到variables。 我写了一些代码,显示我正在运行。

::@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 

任何帮助将不胜感激

问题是你正试图将3个命令塞进一行。 你可能需要用&分开,或者把它们放在一行上。

正如斯蒂芬指出的那样,使用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 

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

过滤您的数据有助于:

 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 time"') 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 button . . . 

“Echo ist ausgeschaltet”是因为在德国时间,没有AM / PM。