태그 보관물: string-manipulation

string-manipulation

Windows 배치 파일에서 문자열의 일부를 추출하는 방법은 무엇입니까? (cmd) 파일의 변수에 저장된 “Abc_123″과 같은 값이

배치 (cmd) 파일의 변수에 저장된 “Abc_123″과 같은 값이 있다고 가정합니다. “123”만 포함 된 변수로 끝나고 싶습니다. 이 작업을 수행하는 기본 제공 방법이 있습니까?

일반적인 Windows (Vista / 2008) 시스템에 내장되어있는 한이 방법이나 성능에 대해서는별로 까다 롭지 않습니다.



답변

부분 문자열 구문을 사용하십시오.

C:\Users\John>set string=Abc_123

C:\Users\John>echo %string%
Abc_123

C:\Users\John>echo %string:~4,3%
123

답변

밑줄 뒤의 모든 것을 원하고 (문자열의 길이 또는 밑줄이 어디에 있는지 알 필요는 없지만 하나의 밑줄 만있을 수 있음) 다음을 시도하십시오.

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이 있습니다. 그래도 모든 시스템에 설치해야합니다. 다른 것도 있습니다.