Вопрос

В настоящее время я пытаюсь расширить наш уже существующий (и работающий) пакетный файл перед фиксацией для фиксации в 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
Это было полезно?

Решение

findstr возвращает 0, если что-то было найдено, и 1, если ничего не найдено.Вы только что перевернули свой чек.

Пакетный foo не требуется, даже в Windows оболочка является интерактивной, поэтому вы можете опробовать ее вживую:

>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 ...

Другие советы

Это не совсем тот ответ, который вы ищете, но вы можете заблокировать все файлы *.suo с помощью глобальное игнорирование вариант.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top