Windows 从批处理脚本获取单行输出
我试图找出在编写批处理脚本时如何避免多个输出。目前,我正在以以下方式解析程序的输出:Windows 从批处理脚本获取单行输出,windows,shell,batch-file,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:"s
@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关闭
SETLOCAL
对于/f“tokens=1,2delims=:”%(q3426541.txt)DO中的%%a(
如果“%%a”==“上次更改版本”设置为“版本=%%b”
如果“%%a”==“上次更改日期”设置为“chgdate=%%b”&转到完成
)
:完成
设置“结果=%chgdate:~1,10%-%rev:~1%”
回显%结果%
后藤:EOF
我使用了一个名为q3426541.txt
的文件,其中包含用于测试的数据
阅读文件,在:
上标记。到第一个:
到%a
,到第二个:
或下线到%b
查看%%
中的字符串是否与两个目标匹配。在rev
中记录最先出现的修订,并在chgdate
中记录日期数据。找到日期数据后,终止循环(因此不再读取文件)
将结果设置为chgdate
的10个
字符,从“字符1”开始,并将结果设置为-和rev
中的修订,从“字符1”开始
请注意,批处理子字符串是根据字符串的第一个字符“字符0”计算的
for /f "tokens=3,4 delims=: " %%a in ('find "Last Changed" tmp.txt') do set "_%%a=%%b"
echo %_Date%-%_Rev%
或者更好(无临时文件):
那么
@echo off
呢?或者,如果您出于任何原因不想这样做,。。。do@echo%%i>tmp.txt对我来说太复杂了。您没有透露文件的内容,因此简化将是难以捉摸的。除了您的代码相当复杂之外,我认为问题来自管道
,因此打开了两个新的cmd
实例,其中脚本中的@echo off
无效;因此,`|@for/F`和/或do@echo%%i
应该避免意外的回声。。。
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)
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%