我试图弄清楚在编写批处理脚本时如何避免多个输出。目前我正在以下列方式解析程序的输出:
@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客户端的输出&#34; svn info&#34;命令 获取表格中的日期和修订号: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)
答案 0 :(得分: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
,第二个:
或另一个%%b
。
查看%%
中的字符串是否与两个目标匹配。记录rev
中首先出现的修订和chgdate
中的日期数据。在找到日期数据时,终止循环(因此不再读取文件)。
将结果设置为10
的{{1}}个字符,从&#34开始;字符1&#34;并使用 - 和chgdate
中的修订版开始于&#34;字符1&#34;
请注意,批次子串次计算是从&#34;字符0&#34;是字符串的第一个字符。
答案 1 :(得分:1)
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%