2014-05-25 3 views
1

for 루프 (최소 축소 예);배치 파일 : for 루프의 questionmark를 이스케이프 처리합니다.

@echo off 
for %%a in (help -help --help /help ? /?) do ( 
    echo %%a 
) 

'?' 캐릭터. 그것은 최초의 안타 때

C:\Temp>test.bat 
help 
-help 
--help 
/help 

C:\Temp> 

그래서 그냥 루프를 종료 출력 '?'.

이 세트의 적절한 이스케이프 시퀀스는 무엇입니까? 물건, 이중 따옴표, 캐럿, 백 슬래시 등을 시도했지만 아무것도 작동하지 않는 것 같습니다. 아무것도 작동하지 않습니다 때문에

C:\Users\Alex\Downloads\test>for /f "tokens=* delims=" %a in ('echo help -help --help /help ? /?') do echo %a 

C:\Users\Alex\Downloads\test>echo help -help --help /help ? /? 
help -help --help /help ? /? 

답변

4

다른 옵션은 FOR/F 문자열 내에 줄 바꿈을 사용하는 것입니다. FOR/F는 각 행을 독립 문자열로 취급합니다. 아래에서는 같은 일을하는 네 가지 방법을 보여줍니다.

@echo off 
setlocal enableDelayedExpansion 

:: Define LF to contain a linefeed character 
set ^"LF=^ 

^" The above empty line is critical. DO NOT REMOVE 

:: Option 1 
:: Embed linefeeds directly in the string literal 
for /f %%A in ("help!LF!-help!LF!--help!LF!/help!LF!?!LF!/?") do (
    echo(%%A 
) 


echo(
:: Option 2 
:: Define a variable with spaces and use search and replace 
:: to substitue linefeeds 
set "help=help -help --help /help ? /?" 
for %%L in ("!LF!") do for /f %%A in ("!help: =%%~L!") do (
    echo(%%A 
) 


echo(
:: Option 3 
:: Embed linefeed directly in string without LF variable 
for /f %%A in (^"help^ 

-help^ 

--help^ 

/help^ 

?^ 

/?^") do (
    echo(%%A 
) 


echo(
:: Option 4 
:: Embed linefeed directly in search and replace without LF variable 
for /f %%A in (^"!help:^ ^=^ 

!^") do (
    echo(%%A 
) 

나는 옵션 2를 선호한다. 나는 읽기 쉽지만 아직 작다는 것을 알았다.

MC ND와 I는 모두 echo(%%A입니다. 이것은 echo /?이 ECHO 명령에 대한 도움말을 표시하지 못하게하는 데 필요합니다.

+0

+1. 또 다른 하나는''! help : = %% ~ L! ''에서/f %% A를 위해''for %% L in (^ "^'-'빈 줄 ' 'echo (%% b' -')' – Aacini

+0

이전 echo (%% b'는'echo %% A' ... **; -) ** – Aacini

+0

@dbenham 고마워요! 옵션 2 내가 사용한거야. – Tieske

0

당신은, 그것은 ? 문자를 이스케이프없이 작동하는 for /f 루프를 사용하는 경우. 요소가 * 또는 ?을 포함하는 경우 일련의 요소를 통해 명령 for 반복, 그것을 테스트한다 간단한 형태 (for %%x in (set) do ...)에서

. 이 경우 파일 와일드 카드로 간주되어 지정된 표현식과 일치하는 파일을 검색합니다. 배치 파일이 들어있는 폴더에 단일 문자 이름과 확장자가없는 파일을 배치하면이 파일을 테스트 할 수 있으며 ?은 일치하며 결과는 출력에 표시됩니다.

그리고 내가 아는 한 그것을 피할 방법이 없습니다. 이것은 명령이 작동하기위한 방법입니다.

당신은 당신이하려고하는 것과 유사한 무언가를 만들 수 있지만, 각 값은 환경 변수에 있고 세트가로 처리 된 set 명령 및 출력을 통해 검색되는이 샘플에서 다른 접근 방식

@echo off 
    setlocal 

    set "opt.a=help" 
    set "opt.b=-help" 
    set "opt.c=--help" 
    set "opt.d=/help" 
    set "opt.e=?" 
    set "opt.f=/?" 

    for /f "tokens=2 delims==" %%a in ('set opt.') do ( 
     echo(%%a 
    ) 

    endlocal 

가 필요합니다

for 명령의 옵션. 그것은 단지 하나의 옵션입니다. 값을 for /f으로 처리하려면 줄로 구분 된 문자열로 값이 필요합니다.

+0

목록을 반복하는 것이 어떻게 도움이되는지 모르겠습니까? – Tieske

1

아무것도 작동하는 것 같다 없습니다 : 루프가 같은 방식으로 작동하지 않지만

관련 문제