【问题标题】:Parsing data from cmd从 cmd 解析数据
【发布时间】:2015-04-07 19:11:18
【问题描述】:
我一直在尝试使用“网络时间”实用程序来获取网络上另一台机器的时间(由于各种原因,我无法使用现有的 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
任何帮助将不胜感激
【问题讨论】:
标签:
windows
batch-file
cmd
batch-processing
【解决方案1】:
问题是您试图将 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 并希望将您的 sets 保留在同一行:
@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
就个人而言,我发现第一个版本更具可读性。
【解决方案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。