2014-05-11 1 views
0

문자열 및/또는 숫자를 포함 할 수있는 변수가 있지만 경우에 따라 숫자 문자를 제거해야합니다. 그래서 나는 기본적으로;문자열 및/또는 숫자를 포함 할 수있는 변수

if defined ARG2 (
    for %%b in (0 1 2 3 4 5 6 7 8 9) do set ARG2=!ARG2:%%b=! 
) 

거의 모든 경우에 적용되지만 문제가 있습니다. ARG2에 숫자 문자 만 있으면 ARG2 값이 9=으로 변경됩니다. 이 문제를 해결하려면 어떻게해야합니까? 아니면 변수에서 숫자 문자를 제거하는 더 좋은 방법이 있습니까?

+0

문제를 재현 할 수 없습니다. 'ARG2'를'9 ='로 확장하기 위해 당신이주고있는 입력은 무엇입니까? – unclemeat

+0

'888'과 같은 것 –

답변

0

888을 입력하면 for 루프가 8에 도달하고 문자열에서 모든 문자가 제거됩니다. 따라서 빈 변수가 있습니다. 따라서 9를 제거하려고하면 아무 것도 확장되지 않고 어떤 이유로 cmd가 문자열 조작을 고려하지 않고 그냥 표시합니다 (마찬가지로 6667=을 출력합니다). 이 문제를 해결하려면 ARG2이 비 었는지 확인하기 위해 수표를 추가하기 만하면됩니다. ARG2 아무것도로 확장하는 경우

if defined ARG2 (
    for %%b in (0 1 2 3 4 5 6 7 8 9) do if "!ARG2!"=="" (goto :break) else set ARG2=!ARG2:%%b=! 
) 
:break 

이 것은 단지 :break 라벨을 고토.

답변은 여기에 - How does the Windows Command Interpreter (CMD.EXE) parse scripts? - 이유에 대한 더 나은 설명을 제공해야합니다.

관련 문제