Pergunta

Atualmente, estou tentando estender a nossa já existente (e trabalho) pré cometer arquivo de lote para cometer a SVN. Os primeiros blocos de parte qualquer cometer esse não tem comentários e funciona como esperado. A segunda parte é uma attmept para bloquear usuários que cometem arquivos SUO, no entanto, isso está bloqueando todos os commits.

O meu entendimento de DOs scripting não é grande, então eu suspeito que pode ser meu uso do FINDSTR?

alguém pode ajudar?

"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
Foi útil?

Solução

retornos FINDSTR 0 se algo foi encontrado, e 1 se nada foi encontrado. Você só invertida seu cheque.

No lote-foo obrigados, mesmo no Windows o shell é interativo, assim você pode experimentá-lo vivo:

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

>echo %ERRORLEVEL%
0

>dir | findstr ".slngimpf"

>echo %ERRORLEVEL%
1

Btw, mais fácil escrever

if errorlevel 0 andthencontinuewithwhatever

Desta forma, você script também é estável contra o sinistro:

set errorlevel=0

que irá destruir qualquer tentativa futura para imprimir o errorlevel com% errorlevel% de forma correta.

( Editar ) Nota importante: eu esqueci de dizer que o if errorlevel verificações de sintaxe se o errorlevel é maior ou igual para o valor ser testado para. Então, para usá-lo corretamente, você deve sempre verificar o maior erro em primeiro lugar, como:

someCommand
if errorlevel 10 ...
if errorlevel 9 ...
if errorlevel 0 ...

Outras dicas

Não exatamente a resposta que você está procurando, mas você pode bloquear todos os arquivos * .suo com o -ignora globais opção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top