从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
就我个人而言,我觉得第一个版本更具可读性。
我一直在尝试使用 "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
就我个人而言,我觉得第一个版本更具可读性。