3

我目前正在尝试扩展我们已经存在的(和工作的)预提交批处理文件以提交到 SVN。第一部分阻止任何没有评论并按预期工作的提交。第二部分是阻止用户提交 SUO 文件的尝试,但这目前正在阻止所有提交。

我对 DO 脚本的理解不是很好,所以我怀疑这可能是我对 FindStr 的使用?

任何人都可以帮忙吗?

"C:\Program Files\VisualSVN Server\bin\svnlook.exe" log -t %2 %1 | FindStr [a-zA-Z0-9]
IF %ERRORLEVEL% EQU 0 GOTO OK
echo "Commit Comments are Required" >&2
exit 1
:OK
"C:\Program Files\VisualSVN Server\bin\svnlook.exe" diff -t %2 %1 | FindStr /R "[a-zA-Z]\.suo"
IF %ERRORLEVEL% EQU 0 exit 0
echo "SUO files cannot be committed" >&2
exit 1
4

2 回答 2

5

findstr 如果找到了某些东西,则返回 0,如果没有找到,则返回 1。你只是把支票倒过来了。

不需要 batch-foo,即使在 Windows 上,shell 也是交互式的,所以你可以尝试一下:

>dir | findstr ".sln"
15.01.2009  16:37            33.844 Project.sln

>echo %ERRORLEVEL%
0

>dir | findstr ".slngimpf"

>echo %ERRORLEVEL%
1

顺便说一句,更容易写

if errorlevel 0 andthencontinuewithwhatever

这样,您的脚本对于不祥的情况也很稳定:

set errorlevel=0

然后,这将破坏任何未来以正确方式使用 %errorlevel% 打印出错误级别的尝试。

编辑)重要提示:我忘了说if errorlevel语法检查错误级别是否大于或等于被测试的值。因此,要正确使用它,您必须始终首先检查最高错误,例如:

someCommand
if errorlevel 10 ...
if errorlevel 9 ...
if errorlevel 0 ...
于 2009-02-19T11:19:31.723 回答
3

不完全是您正在寻找的答案,但您可以使用 global-ignores选项阻止所有 *.suo 文件。

于 2009-02-19T10:29:15.930 回答