2015-05-05 105 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