2012-10-04 2 views
0

나는 HELP 출력의 모든 라인에서 변수에 첫 단어를 가져오고이 변수를 echo하는 코드를 만들려고합니다. 여기 내 코드는 다음과 같습니다.Windows CMD FOR 루프

@echo off 
set a= 
for /F "tokens=1,*" %%i in ('help') do (
set a=%a% %%i 
) 
echo %a% 

그러나 마지막 줄의 첫 단어 만 반환합니다. 왜? 에코가 할 일 (......)

@echo off 
for /F "tokens=1,*" %%i in ('help') do (
echo %%i 
) 

과를 인쇄 할 필요없이 외부에 있기 때문에

답변

2
에 대한 짧은 도움말 텍스트를 얻을 수

help1 MKDIR 

등이 배치를 호출

for 루프에서 지연된 확장을 사용해야합니다.

@echo off 
setlocal enabledelayedexpansion 
set a= 
for /F "tokens=1,*" %%i in ('help') do (
set a=!a! %%i 
) 
echo %a% 

a 변수 주위에 %을 사용하는 대신 ! 님의 지연 확장을 사용합니다.

+0

+1, 그건 OP의 질문에 있었지만, 첫 번째 토큰 만 사용되고 있기 때문에''토큰 = 1, * ''이 필요 없다는 것을 알고 있습니다. – dbenham

+0

고마워, 네 말이 맞아. –

1

직접 사용할 수 %% 내가.
또 다른 아주 간단한 예는 저장과 같은 배치 될 수로 help1.cmd

@echo off 
for /F "tokens=1,*" %%i in ('help') do (
if /I "%%i" EQU "%1" echo %%j 
) 

당신은 MKDIR 명령

+0

시도해 보았습니다. "ECHO가 지금 사용 중입니다." – michaeluskov

+0

답변이 업데이트되었습니다. – Steve

+0

모든 단어를 표시하고 다시 사용할 수있는 변수에 넣지 않습니다. 이것은 변수를 설정하고 한 번 사용하는 것과 같은 결과를 갖지만 OP는 다른 변수를 사용할 수 있습니다. –

3

발리 C는 명시된대로 문제를 해결했지만 도움이되는 명령 목록을 얻으려고하는 것처럼 보입니다.

일부 명령은 여러 행에 표시되므로 불필요한 단어가 표시됩니다. 또한 원하지 않는 "For"로 시작하는 선행 및 후행 줄이 있습니다.

다음은 명령리스트를 작성하는 영어 기계의 간단한 스크립트입니다. FINDSTR 명령은 다른 언어로 변경해야합니다.

@echo off 
setlocal enableDelayedExpansion 
set "cmds=" 
for /f "eol= delims=." %%A in ('help^|findstr /bv "For"') do (
    for /f %%B in ("%%A") do set "cmds=!cmds! %%B" 
) 
set "cmds=%cmds:~1%" 
echo %cmds% 


편집

안스 Wiechers 내가 모든 언어로 작업한다고 생각 https://stackoverflow.com/a/12733642/1012053에서 바로 명령 이름을 추출하기 위해보다 효율적인 알고리즘을 함께했다. 나는 아래의 코드를 단순화하기 위해 그의 아이디어를 사용했다.

@echo off 
setlocal enableDelayedExpansion 
set "cmds=" 
for /f %%A in ('help^|findstr /brc:"[A-Z][A-Z]* "') do set "cmds=!cmds! %%A" 
set "cmds=%cmds:~1%" 
echo %cmds% 
+0

+1 첫 번째 일괄 골드 배지를받을 때까지의 기간. :) –

관련 문제