本帖最后由 zhwbqd 于 2012-7-20 15:05 编辑
十分感谢 apang 的解答,我后来也想到应该用if来判断, 也写了一个可以实现的,不知道您觉得我这个怎么样- for /f "tokens=1 delims=##" %%i in ('C:\csvn\bin\svnlook.exe log "%REPOS%" -r "%TXN%"') do set REV=%%i
- echo %REV%|findstr "^[0-9]*$" > nul
- if %errorlevel% gtr 0 ( set REV=)
复制代码 如果取到的##是数字 errlevel就是0了, 但是缺点就是如果##数字 后面还有内容的话就会有问题了。。
小弟还有一个问题就是我想将svnlook的命令执行的结果赋值给一个变量,该输出可能包含多行的log信息, 看到论坛上有人用- set "str=%str:str=>nul & dir/b%"
复制代码 但是如果我将dir/b 替换为 C:\csvn\bin\svnlook.exe log "%REPOS%" -r "%TXN%“ 的话就会有问题, 打开echo on 看到貌似这样不支持 %TXN%和%REPOS%的变量 在其中,
后来我就用了另一种方法,但是这种的缺点就是无法换行,而且超过4行就会被忽略。- setlocal enabledelayedexpansion
- set n=1
- for /f "delims=" %%i in ('C:\csvn\bin\svnlook.exe log "%REPOS%" -r "%TXN%"') do (
- set "_!n!=%%i"
- set /a n+=1
- )
- set _
- set DESC=%_1% %_2% %_3% %_4%
复制代码 不知道各位有何高见?
好像我查将 多行命令输出赋值给一个变量的这样的问题还没有人问过。。是太简单了吗。。。
后来认真看了一下真的很简单。。。惭愧复制代码 但是还是在bat文件中还是有点问题
输出的时候虽然打出了description,但是含有前面的一些判断 我打开了echo on 还是会有1>nul & C:\csvn\bin\svnlook
.exe log C:\csvn\data\repositories\fms-lab -r 287赋值给了desc- C:\csvn\data\repositories\fms-lab\hooks>set DESC= 1>nul & C:\csvn\bin\svnlook
- .exe log C:\csvn\data\repositories\fms-lab -r 287
复制代码
|