从cmd解析数据

Parsing data from cmd

我一直在尝试使用 "net time" 实用程序来获取网络上另一台机器的时间(由于各种原因我无法使用现有的 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

如有任何帮助,我们将不胜感激

过滤数据有帮助:

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

完整的工作脚本(改编为我的德语 windows):

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

问题是您试图将 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

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