【问题标题】: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。

      【讨论】:

      • 这似乎对问题没有帮助。
      猜你喜欢
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 2020-06-03
      • 1970-01-01
      相关资源
      最近更新 更多