簡體   English   中英

從批處理腳本獲取單行輸出

[英]Get a single line output from a batch script

我試圖弄清楚編寫批處理腳本時如何避免多個輸出。 目前,我以以下方式解析程序的輸出:

@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 clientsvn 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
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的文件, q3426541.txt包含用於測試的數據。

讀取文件,標記為: 直到第一個: %%a ,第二個:或eol到%%b

查看%%中的字符串是否與兩個目標匹配。 rev記錄最先出現的修訂,在chgdate記錄日期數據。 找到日期數據后,終止循環(因此不再讀取文件)。

將結果設置為chgdate10字符,從“字符1”開始,並以-開頭,然后在rev的修訂rev從“字符1”開始

請注意,批處理子字符串是從字符串的第一個字符“字符0”計算得出的。

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%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM