2015-02-02 9 views
2

나는 \.으로 끝나는 문자열을 가지고 있습니다. \.특수 문자 '.'로 문자열 분할.

예 : 내 문자열 전에 내가 원하는 건 문자열입니다 : D:\Work\WelCome\.
출력 문자열이어야한다 : 당신은 매우 일반적으로이 질문을 찾을 경우 D:\Work\WelCome

는 서하십시오. 특수 문자로 문자열을 나누는 그물을 검색했지만 기대했던 결과를 얻지 못했습니다.

배치 스크립팅에는 익숙하지 않지만 전문가에게는 충분하지 않습니다.

답변

2

은 파일/폴더 경로이기 때문에, (당신은 단지 왼쪽 부분을 필요로하는 경우) 그 이론적 경우

for %%a in ("D:\Work\WelCome\.") do echo %%~fa 

을 문자열을 분할하는 것보다 OS가 당신을 위해 그것을 해결하도록하는 것이 더 쉽습니다 이 추가적으로 데이터 (그러나 더 이상 백 슬래시)를 포함 할 수 끝나는 점은, 이것은

rem The string with more data 
set "myString=D:\Work\WelCome\.blah" 

for %%a in ("%myString%[email protected]\..") do echo %%~fa 

로 변환 할 수는 for@은이 추가적으로 정보 (사건을 종료 이전 점은 여전히 ​​작동 할 수 방법은) 항상 있다는 것을 보장이 추가적으로 명령 wi 파일 참조를 볼 수 있으며 부모 폴더에 대한 참조 만 가져와야합니다.

그러나이 방법은 파일/폴더 참조를 지우는 방법 일 뿐이며 정확한 문자로 문자열을 분할하는 방법이 아닙니다. 문자열을 분할 할 수있는 쉬운 솔루션을

이 명령 연결 및 주석의 시작 ( rem)로 분할 문자열을 대체

@echo off 
    setlocal enableextensions disabledelayedexpansion 

rem The string 
    set "myString=D:\Work\WelCome\.test" 

rem Do the split 
    set "myString=%myString:\.="&rem %" 
    set "myString=%myString%" 

rem Show data 
    echo %myString% 

(또는 더 정확하게하기 위해 접미사를 제거). 변수가 자신에게 할당 그래서

set "myString=D:\Work\WelCome\.test" 

가, 다음 줄에,

set "myString=D:\Work\WelCome"& rem test" 

에이 방법을 변환하고, 불필요한 부분은합니다 (rem으로 숨겨져) 제거됩니다.

+1

'D : \ Work \ WelCome \ .blah'와 같이 작동하지 않는 경우에는 작동하지 않습니다. 내가 완전히 당신과 동의하는 동안, OP는 구체적으로 말해서, 내가 생각한 경로가 – Monacraft

+0

@Monacraft 경로를 따라 가능한 문자를 암시한다고 생각했다. 물론 그렇다.이제는 이것이 문자열을 "분할하는"방법이 아니라는 대답에 설명되어 있습니다. 고맙습니다. –

+0

@MCND에게 감사드립니다. 그것은 나를 위해 일했다 ... –

1

이 코드를 테스트 한 작동합니다

C:\> split.bat C:\1\2\3\. 
C:\1\2\3 

C:\> split.bat C:\1\2\3\.4\5\ 
C:\1\2\3 

C:\> split.bat C:\1\2\3\.4\5\.6\7\8 
C:\1\2\3 

C:\> split.bat C:\1\2.\ .3.\...4\.5 
C:\1\2.\ .3. 

C:\> split.bat C:\.1\2\3\4\5\6\7\8\9\ 
C: 

당신이 찾고 있던 무슨 : 여기

setlocal enabledelayedexpansion 
set p=D:\Work\WelCome\. 
set v= 
:: v is the output 
for %%a in (%p:.= %) do (
    set "v=!v!.%%~a" 
    set q=%%~a 
    if "!q:~-1!"=="\" goto :end 
) 
:end 
set v=%v:~1% 
set v=%V:~0,-1% 
echo %v% 

내가 사용하는 경우입니다. 변수로 더 많은 것을하고 싶다면 echo 그냥 그 라인을 따라 %v%을 참조하십시오.

0
@ECHO OFF 
SETLOCAL 
SET "string=D:\Work\WelCome\." 

:: Classic solution if the string is in an environment variable 

ECHO %string:~0,-2% 

:: solution if the string is in a metavariable 

FOR %%z IN ("%string%") DO ECHO %%z becomes %%~dpnz 

GOTO :EOF 

이는 자명하다.