나는 명령을 100-200 번 실행해야하며, 지금까지 연구에 따르면이 명령의 사본 100 개를 복사 / 붙여 넣거나 for
루프를 사용해야 하지만 for
루프는 항목 목록을 기대하므로 필요한 항목이 필요합니다. 요점을 무너 뜨리는 200 개 파일 또는 200 개 항목 목록.
오히려 C 프로그램을 작성할 필요가없고 테스트 목적으로 프로그램을 실행하기 위해 다른 프로그램을 작성해야하는 이유를 문서화하는 데 시간이 걸렸습니다. 내 프로그램 자체의 수정도 옵션이 아닙니다.
따라서 명령이 주어지면 배치 스크립트를 통해 a
어떻게 명령을 실행 N
합니까?
참고 : 나는 무한 루프를 원하지 않습니다
예를 들어, 다음은 Javascript와 비슷합니다.
var i;
for (i = 0; i < 100; i++) {
console.log( i );
}
Windows에서 실행되는 배치 스크립트에서 어떤 모양입니까?
답변
for /l
당신의 친구입니다:
for /l %x in (1, 1, 100) do echo %x
1에서 1 단계 씩 시작하여 100에서 끝납니다.
%
배치 파일에 있으면 두 개를 사용하십시오.
for /l %%x in (1, 1, 100) do echo %%x
(이것은 Windows 스크립팅에 대해 정말로 싫어하는 것 중 하나입니다)
루프의 각 반복에 대해 여러 명령이있는 경우 다음을 수행하십시오.
for /l %x in (1, 1, 100) do (
echo %x
copy %x.txt z:\whatever\etc
)
또는 배치 파일
for /l %%x in (1, 1, 100) do (
echo %%x
copy %%x.txt z:\whatever\etc
)
키 : 명령이 일련의 파일을 조작하지 않고 숫자 방식으로 작동 함을
/l
나타냅니다
( 루프 변수 (시작 값, 값 증가, 종료 조건 [포함])).for
%x
답변
디렉토리의 파일을 반복하려면 다음을 수행하십시오.
@echo off
setlocal enableDelayedExpansion
set MYDIR=C:\something
for /F %%x in ('dir /B/D %MYDIR%') do (
set FILENAME=%MYDIR%\%%x\log\IL_ERROR.log
echo =========================== Search in !FILENAME! ===========================
c:\utils\grep motiv !FILENAME!
)
“enableDelayedExpansion”과! FILENAME을 사용해야합니다! $ FILENAME $ 대신. 두 번째 경우, DOS는 프로그램이 반복 될 때마다가 아니라 변수를 한 번만 (루프에 들어가기 전에) 해석합니다.
답변
단순하지만 카운트 된 루프를위한 템플릿 :
set loopcount=[Number of times]
:loop
[Commands you want to repeat]
set /a loopcount=loopcount-1
if %loopcount%==0 goto exitloop
goto loop
:exitloop
예 : “Hello World!”라고 말합니다. 5 회:
@echo off
set loopcount=5
:loop
echo Hello World!
set /a loopcount=loopcount-1
if %loopcount%==0 goto exitloop
goto loop
:exitloop
pause
이 예제는 다음을 출력합니다 :
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Press any key to continue . . .
답변
for
루프 대신 이것을 시도 할 수도 있습니다 .
set count=0
:loop
set /a count=%count%+1
(Commands here)
if %count% neq 100 goto loop
(Commands after loop)
아주 작고 항상 사용하는 것입니다.
답변
또는 반복하려는 횟수만큼 변수를 감소 / 증가시킬 수 있습니다.
SETLOCAL ENABLEDELAYEDEXPANSION
SET counter=200
:Beginning
IF %counter% NEQ 0 (
echo %x
copy %x.txt z:\whatever\etc
SET /A counter=%counter%-1
GOTO Beginning
) ELSE (
ENDLOCAL
SET counter=
GOTO:eof
분명히, FOR /L
고속도로를 사용하고 이것은 더 오래 걸리는 뒷골목이지만 동일한 목적지에 도착합니다.
답변
FOR 루프를 피하면서 다음 효과에 무언가를 수행 할 수 있습니다.
set counter=0
:loop
echo "input commands here"
SET /A counter=%counter%+1
if %counter% GTR 200
(GOTO exit) else (GOTO loop)
:exit
exit
답변
당신은 for
진술 없이 이것을 할 수 있습니다 ^. ^ :
@echo off
:SPINNER
SET COUNTP1=1
:1
CLS
:: YOUR COMMAND GOES HERE
IF !COUNTP1! EQU 200 goto 2
SET COUNTP1=1
) ELSE (
SET /A COUNTP1+=1
)
goto 1
:2
:: COMMAND HAS FINISHED RUNNING 200 TIMES
기본적인 이해가 있습니다. 그냥 시험 해봐 :피