2015-05-05 4 views
1

У меня вопрос о пакетном файле, который я пишу.Как выйти из цикла for/f в пакете?

Как определить цикл «for/f» для выполнения только одной части моего скрипта, а не всего скрипта?

В приведенном ниже сценарии, я хотел бы

Я точен, что мне нужно использовать метод «вызов» (из-за другой проблемы с люфтом).

Спасибо за вашу помощь :)

@echo off 
    setlocal enabledelayedexpansion 
    WMIC LOGICALDISK where drivetype=3 get caption>%~n0.tmp 
    for /f "tokens=1-3 skip=1" %%a in ('type "%~n0.tmp"') do call :displayinfo %%a 
del "%~n0.tmp" 
goto :eof 

:displayinfo 
set drive=%1 
echo Le drive est %drive% 
echo lancement du DIR 
REM call dir /A HS /s /b %drive%\ >> d:\Dir_ALL.txt 
echo Fin du DIR 

:step2 
echo this is the step2, to be executed when the for /F loop is over. 
echo blablalblablalballbabal 

:step_End 
echo Ths is the end 
@pause 
+1

Обычный способ - использовать 'goto: label', который разбивает контекст' for', но какой цикл вы хотите выйти из. – npocmaka

+0

Спасибо. На самом деле я хочу, чтобы мой скрипт перечислил все диски с помощью WMIC, а затем выполнил метку: displayinfo. Поэтому я хочу, чтобы он выполнял DIR/A HS ... на каждом найденном диске. Затем, когда этот цикл закончен, я хочу перейти к «step2» и т. Д. (Так что больше не в цикле). – Isabelle

ответ

3

Вам необходимо внести два изменения.

  1. изменить goto :eof две строки ниже вашей for линии к goto :step2.
  2. Добавить goto :EOF в качестве последней строки вашего :displayinfo метода. Это приведет к возврату метода в цикл for.

Должно быть так.

@echo off 
setlocal enabledelayedexpansion 
WMIC LOGICALDISK where drivetype=3 get caption>%~n0.tmp 
for /f "tokens=1-3 skip=1" %%a in ('type "%~n0.tmp"') do call :displayinfo %%a 
del "%~n0.tmp" 
goto :step2 

:displayinfo 
set drive=%1 
echo Le drive est %drive% 
echo lancement du DIR 
REM call dir /A HS /s /b %drive%\ >> d:\Dir_ALL.txt 
echo Fin du DIR 
goto :EOF 

:step2 
echo this is the step2, to be executed when the for /F loop is over. 
echo blablalblablalballbabal 

:step_End 
echo Ths is the end 
@pause 
+0

Спасибо, я думаю, что я неправильно понял средства «EOF». – Isabelle