2017-12-12 20 views
2

명령을 받고 실행하는 배치 스크립트를 작성하고 있습니다. 입력 끝에서 문자열에 대한 사용자의 입력을 검사해야합니다. 예를 들어 사용자가 ECHO Hello World & ECHO ON을 입력하고이 명령이 저장된 변수가 %CHO% 인 경우 변수 끝에 & ECHO ON을 어떻게 찾을 수 있습니까?변수 끝에서 문자열 찾기 - 일괄 스크립팅

입력에 ECHO ON &을 이미 찾을 수있는 방법이 있지만 변수 끝에 & ECHO ON이 있는지 확인하는 방법이 필요합니다. 만약 내가 단지 & ECHO ON을 확인했다면, 스크립트는 쉽게 & ECHO ONWARDS 또는 그와 비슷한 것으로 오인하여 실제로는 & ECHO ON이라고 생각할 수 있습니다.

어떻게 할 수 있습니까?

+4

'SET' 명령에 대한 도움말 파일에 설명 된대로 부분 문자열을 사용할 수 있습니다. 'IF/I "="== "% cho : ~ -7 %"echo match' – Squashman

답변

1

이 시도 - 너무 특수 기호를 처리 할 수 ​​있어야합니다 (이 endsWith 서브 루틴을 사용) : (이 외부 명령에 의존로 아마 속도가 느려집니다)

@echo off 

:::example calls of :endsWith subroutine 

call :endsWith abcdefgh fgh 
echo %errorlevel% 
call :endsWith abcdefgh abc 
echo %errorlevel% 

exit /b 0 

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
:endsWith [%1 - string to be checked;%2 - string for checking ] 
@echo off 
rem :: sets errorlevel to 1 if %1 ends with %2 else sets errorlevel to 0 
setlocal EnableDelayedExpansion 

set "string=%~1" 
set "checker=%~2" 

set LF=^ 


rem ** Two empty lines are required 
rem echo off 
for %%L in ("!LF!") DO (
    for /f "delims=" %%R in ("!checker!") do ( 
     set "var=!string:%%~R=%%L#!" 
    ) 
) 

for /f "delims=" %%P in (""!var!"") DO (
    set "temp=%%~P" 
) 

if "%temp%" EQU "#" (
    endlocal & exit /b 1 
) else (
    endlocal & exit /b 0 
) 
goto :eof 
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 

또한 FINDSTR가 사용할 수 있습니다

echo abcdefgh| findstr /e "fgh" >nul 2>nul && (
    echo ends with 
)||(
    echo does not ends with 
) 
+0

흥미 롭습니다. 더 간단한 방법이 있습니까? –

+0

@ChristianSirolli - 내 업데이트를 확인하십시오 (특수 기호에 대한 트릭을 추가해야 할 수도 있음). 코드를 복잡하지 않게 독립 실행 형 함수로 사용할 수는 있지만 – npocmaka

+0

독립 실행 형 함수로 사용하려면 어떻게해야합니까? –