문제

내 SVN Pre Commit 후크에서 FindStr를 사용하여 특정 파일 유형을 차단하여 커밋되었습니다. 나는 이제 이것을 디렉토리로 확장하고 싶다. 첫 번째 경우 obj directories는 정규 표현에 문제가 있고 DIR의 를 탈출하고 싶다.

현재 나는 가지고있다

"C:\Program Files\VisualSVN Server\bin\svnlook.exe" changed -t %2 %1 | FindStr /R ".obj\\\"
IF %ERRORLEVEL% EQU 1 GOTO OK
echo "obj directories cannot be committed" >&2
exit 1
:OK
exit 0

나는 결국 로 시도했지만 이중 인용문도 탈출하는 것 같습니다.

어떤 아이디어?

도움이 되었습니까?

해결책 4

다음을 사용하여 이것을 해결했습니다.

:CHECKOBJDIRWITHFILES
"C:\Program Files\VisualSVN Server\bin\svnlook.exe" changed -t %2 %1  > "C:\Repositories\SoftwareRepository\hooks\out.txt"
"C:\Program Files\VisualSVN Server\bin\svnlook.exe" changed -t %2 %1 | FindStr /R ./obj/.
echo %ERRORLEVEL% > "C:\Repositories\SoftwareRepository\hooks\error.txt"
IF %ERRORLEVEL% EQU 1 GOTO CHECKOBJDIRWITHOUTFILES
echo "obj directories and their files cannot be committed" >&2
exit 1
:CHECKOBJDIRWITHOUTFILES
"C:\Program Files\VisualSVN Server\bin\svnlook.exe" changed -t %2 %1  > "C:\Repositories\SoftwareRepository\hooks\out.txt"
"C:\Program Files\VisualSVN Server\bin\svnlook.exe" changed -t %2 %1 | FindStr /R ./obj
echo %ERRORLEVEL% > "C:\Repositories\SoftwareRepository\hooks\error.txt"
IF %ERRORLEVEL% EQU 1 GOTO OK
echo "obj directories cannot be committed" >&2
exit 1
:OK
echo %ERRORLEVEL%  >&2
exit 0

다른 팁

경험적으로 다음 명령 중 하나가 원하는대로 수행합니다.

... | findstr /R \.obj\\

... | findstr /R "\.obj\\\\"

지정된 이후 /R, 당신은 또한 앞의 배가가 필요합니다 . 그렇지 않으면 와일드 카드 문자로 해석되기 때문입니다.

참고 사항 : Findstr.exe가 MS의 C 라이브러리에서 사용하는 다소 이상한 인용 규칙을 사용하는 테스트에서 나온 것 같습니다. Microsoft의 웹 사이트. 이 특별한 경우에 관련 규칙은 짝수의 백 슬래시가 앞에있는 이중 쿼트 캐릭터가 반 슬래시의 절반으로 해석된다는 것을 언급하는 규칙입니다. (예, 이상하고 CMD.exe가 특별히 두 배의 문자를 취급한다는 것을 알게되면 이상해집니다. 창문에서 제대로 인용하는 것은 솔직히 고통의 세계입니다.)

regexp에서, backslash는 문자열 Regex에서 올바르게 해석되도록 이중 탈출되어야합니다.

FindStr /R "\\.obj\\\\"

그러나 당신의 경우, 당신의 성분이 두 가지와 일치하기 때문에 .obj 파일 및 "obj"디렉토리, 나는 제안한다 :

FindStr /R "\\.?obj\\\\?"

당신의 orignal regex ( ".obj\\") 만 감지했을 것입니다".obj"디렉토리,"obj". 따라서 '?'

부터 '.' 모든 캐릭터를 의미합니다.\\"해석을 바꾸기 전에.

당신이 얻는 오류는 무엇입니까?

이것은 빨간 청어 일지 모르지만 SVN을 사용합니다. / 경로 분리기로서 Windows에서 일부 문제가 발생합니다. 나는 모든 후크 스크립트에 다음을 바꿔야했다. / 에게 \:

SET REPOS=%1

:: Transform forward-slashes to back-slashes for Windows
SET REPOS=%REPOS:/=^\%

이 경우 실제로 정규 표현이 필요합니까? " obj "하위 문자열을 검색하는 경우 /r 대신 /c를 사용하여 텍스트를 문자 그대로 일치 문자열로 취급 할 수 있습니다.

{command} | findstr /C:\obj\
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top