2016-08-06 6 views
1

아래 예제 배치에서 incno와 공 간 ie12345678 사이의 모든 것을 어떻게 추출하고이를 incno 변수에 넣을까요?배치 파일의 하위 문자열 도움말

@echo off 
Set mystring=test incno12345678 wo5555 locFred Street 
Echo "my string=%mystring%" 
Echo incno 
Echo wo  
Echo loc 

incno 8 ~ 11 자리가 될 수 있지만 항상 문자열에 incno과 공간 사이에있을 것입니다

그것은 내가 지금 문제가 이제 mystring에 변수에 %% d 개 변수를 할당하는 데

입니다 for 루프에서. 아무도 이것으로 나를 도울 수 있습니까? 아래를 참조하십시오.

@echo off 
SETLOCAL enableDelayedExpansion 
color 0B 
For /d %%d in ("C:\Users\%Username%\LocalData\*") do (
Echo "Folder = %%d" 
Set mystring=%%d 
echo "MyString = %mystring%" 
pause 
REM delete until (including) "incno": 
set mystring=%mystring:*incno=% 
echo %mystring% 
REM delete starting with (including) " ": 
set mystring=%mystring: =&rem % 
echo "Incident Number = %mystring%" 
pause 
) 

답변

2
set "mystring=test incno12345678 wo5555 locFred Street" 
for /f %%V in ("%mystring:* incno=%") do set "incno=%%V" 
mystring에 독의 문자와 따옴표를 포함 할 수있는 기회가 있다면

지연 확장을 사용할 수 있습니다

setlocal enableDelayedExpansion 
set mystring=test incno12345678 wo5555 loc"4th & Main" 
for /f %%V in ("!mystring:* incno=!") do set "incno=%%V" 

결과 값이 ! (이 경우에는 문제가 아님)이 포함 된 경우 지연 확장 m 토글 됨

setlocal disableDelayedExpansion 
set mystring=test varABC!XYZ "&)^|<>" 
setlocal enableDelayedExpansion 
for /f %%V in ("!mystring:* var=!") do (
    endlocal 
    set "var=%%V" 
) 
4

당신은 두 단계로 문자열 교체와 함께 할 수 있습니다

Set mystring=test incno12345678 wo5555 locFred Street 
echo %mystring% 
REM delete until (including) "incno": 
set mystring=%mystring:*incno=% 
echo %mystring% 
REM delete starting with (including) " ": 
set mystring=%mystring: =&rem % 
echo %mystring% 
+0

'set mystring = % mystring : = & rem %'은 어떻게 작동합니까? 나는 어디에서나 그 사실을 발견 할 수 없다. '& rem'은 무엇을합니까? – DavidPostill

+0

@DavidPostill - 용지에서 교체를 수행하면 볼 수 있습니다. 연결된 REM 명령을 삽입하기 만하므로 나머지 문자열은 무시됩니다. – dbenham

+0

@dbenham 아 물론. 또 다른 비열한 트릭 :) – DavidPostill

관련 문제