3

現在、SVN にコミットするために、既存の (そして機能している) コミット前のバッチ ファイルを拡張しようとしています。最初の部分は、コメントがないコミットをブロックし、期待どおりに機能します。2 番目の部分は、ユーザーが 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 を返します。小切手を反転させただけです。

Windows でもシェルはインタラクティブなので、バッチ foo は必要ありません。

>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% で正しい方法で出力しようとする将来の試みが破棄されます。

( editif errorlevel ) 重要な注意: errorlevel がテスト対象の値以上かどうかを構文がチェックすることを忘れていました。したがって、正しく使用するには、次のように、常に最初に最大のエラーを確認する必要があります。

someCommand
if errorlevel 10 ...
if errorlevel 9 ...
if errorlevel 0 ...
于 2009-02-19T11:19:31.723 に答える