从批处理脚本

时间:2015-12-14 07:13:44

标签: windows shell batch-file

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

@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)

2 个答案:

答案 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%