Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 从批处理脚本获取单行输出_Windows_Shell_Batch File - Fatal编程技术网

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%