답변:
부분 문자열 구문을 사용하십시오.
C:\Users\John>set string=Abc_123
C:\Users\John>echo %string%
Abc_123
C:\Users\John>echo %string:~4,3%
123
%string:~%start%,%len%%
CALL
과 같이 사용하십시오CALL SET _substring=%%_donor:~%_startchar%,%_length%%%
밑줄 뒤의 모든 것을 원하고 (문자열의 길이 또는 밑줄이 어디에 있는지 알 필요는 없지만 하나의 밑줄 만있을 수 있음) 다음을 시도하십시오.
for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
set AFTER_UNDERSCORE=%%a
)
기본적으로 문자열은 밑줄을 구분 기호로 사용하여 토큰으로 분할됩니다 (delims = _). 두 번째 토큰 (토큰 = 2) 만 for 루프에 전달됩니다 (변수 %% a로). 이 경우 단일 문자열을 처리하므로 루프는 한 번만 실행됩니다.
밑줄 전후에 내용을 저장하려면 다음을 시도하십시오.
for /f "tokens=1,2 delims=_" %%a in ("%STRING%") do (
set BEFORE_UNDERSCORE=%%a
set AFTER_UNDERSCORE=%%b
)
%% a는 스플릿의 첫 번째 토큰에 대한 변수입니다. %% b는 스플릿의 두 번째 토큰에 대한 변수입니다.
배치 언어가 원하는 작업을 수행하기에 충분히 강력하지 않으며 해당 시점에 도달하는 데 너무 오래 걸리지 않는 경우 Windows PowerShell을 사용할 수 있습니다 . 기본적으로 모든 Windows 버전에 설치되지는 않지만 무료로 다운로드 할 수 있습니다.
PowerShell 언어가 마음에 들지 않으면 Perl이 있습니다. 그래도 모든 시스템에 설치해야합니다. 다른 것도 있습니다.
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%
*
욕심을 어떻게 만드 나요? 나는 좋은 ol ' IF NOT ... GOTO :replace
을 사용했지만 더 좋은 방법이 있다면 좋을 것입니다.
_
다음 마지막에있다, 다음 루프set var
help set
언급 된대로 전체 구문을 볼 수 있습니다 . StackOverflow에.