【问题标题】:Get a single line output from a batch script从批处理脚本中获取单行输出
【发布时间】:2015-12-14 07:13:44
【问题描述】:

我试图弄清楚在编写批处理脚本时如何避免多个输出。目前我正在通过以下方式解析程序的输出:

@echo off

TYPE tmp.txt | findstr /R /C:"some_str_to_parse" > tmp2.txt
TYPE tmp2.txt | FOR /f "tokens=4" %%i in ('more') do echo %%i>tmp.txt
set /p some_var=<tmp.txt

TYPE tmp.txt | findstr /R /C:"some_str_to_parse" > tmp2.txt
TYPE tmp2.txt | FOR /f "tokens=4" %%i in ('more') do echo %%i>tmp.txt
set /p some_var2=<tmp.txt

echo %some_var% - %some_var2%

问题是我只想要脚本末尾的 echo 输出,没有别的。

调用批处理脚本时我得到的是:

> echo XXX 1>tmp.txt
> echo YYY 1>tmp.txt
> echo XXX - YYY         <-- This is the only output i want

我怎样才能做到这一点?

提前谢谢你。

编辑:

忘了说,回声已关闭。

我想要的是解析 slik svn 客户端“svn info”命令的输出 以格式获取日期和修订号:YYYY-MM-DD-REVISION

svn info 的输出如下所示:

Path: .
Working Copy Root Path: .....
URL: https://www.....
Relative URL: ^/trunk
Repository Root: ......
Repository UUID: .......
Revision: 123
Node Kind: directory
Schedule: normal
Last Changed Author: xxx
Last Changed Rev: 123
Last Changed Date: 2015-12-11 16:56:22 +0100 (Fri, 11 Dec 2015)

【问题讨论】:

  • @echo off 怎么样?或者,如果您出于任何原因不想这样做,... do @echo %%i&gt;tmp.txt
  • 对我来说似乎过于复杂。您不会透露文件的内容是什么,因此难以简化。
  • 除了您的代码非常复杂之外,问题来自管道| 我认为,因此打开了两个新的cmd 实例,其中脚本中的@echo off 有没有效果;所以` | @for /F` 和/或 do @echo %%i 应该避免意外的回声...

标签: windows shell batch-file


【解决方案1】:
@ECHO OFF
SETLOCAL
FOR /f "tokens=1,2delims=:" %%a IN (q3426541.txt) DO (
 IF "%%a"=="Last Changed Rev" SET "rev=%%b"
 IF "%%a"=="Last Changed Date" SET "chgdate=%%b"&GOTO done
)
:done
SET "result=%chgdate:~1,10%-%rev:~1%"
ECHO %result%
GOTO :EOF

我使用了一个名为 q3426541.txt 的文件,其中包含我的测试数据。

读取文件,标记:。直到第一个:%%a,到第二个: 或eol 到%%b

查看%% 中的字符串是否匹配两个目标。在rev 中记录最先出现的修订,在chgdate 中记录日期数据。找到日期数据后,终止循环(因此不再读取文件)。

将结果设置为chgdate10 字符,从“字符1”开始,并使用-rev 中的修订版本从“字符 1”开始

请注意,批处理子字符串是从作为字符串的第一个字符的“字符 0”计算而来的。

【讨论】:

    【解决方案2】:
    for /f "tokens=3,4 delims=: " %%a in ('find "Last Changed" tmp.txt') do set "_%%a=%%b" 
    echo %_Date%-%_Rev%
    

    甚至更好(没有临时文件):

    for /f "tokens=3,4 delims=: " %%a in ('svn info^|find "Last Changed" ') do set "_%%a=%%b" 
    echo %_Date%-%_Rev%
    

    【讨论】:

      猜你喜欢
      • 2011-06-15
      • 2019-01-08
      • 2021-01-11
      • 2011-08-06
      • 2018-11-07
      • 2015-09-08
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      相关资源
      最近更新 更多