2014-10-06 216 views
1

do()不能用於我在線的代碼,所以我使用do:processline。 問題在於「繼續;」在想要進入下一次迭代時不起作用。這個問題是它的執行:eof每次迭代而不是後循環...如何避免這種情況?謝謝批處理腳本「繼續」循環?

SET NGCSV=UserList3Col.csv 
SET NGCSVT1=UserList3Col.csv.temp1 
SET NGCSVT2=UserList3Col.csv.temp2 
SET NGFINAL=UserListFinal.csv 
del %NGFINAL% 
set /a c=0 
for /f "tokens=1" %%i in (groupList.txt) do call :processline %%i 
goto :eof 

:processline 
SET GROUP=%* 
setlocal EnableDelayedExpansion 
net group /domain "GG-%GROUP%" > %NGCSV% 
REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
REM Now strip out the crap 
REM ...make a temporary copy 
COPY %NGCSV% %NGCSVT2% 
REM ...strip off the crap using alternating temp files 
findstr /B /L /V /C:"The request" %NGCSVT2% > %NGCSVT1% 
findstr /B /L /V /C:"Group name" %NGCSVT1% > %NGCSVT2% 
findstr /B /L /V /C:"Comment" %NGCSVT2% > %NGCSVT1% 
findstr /B /L /V /C:"Members" %NGCSVT1% > %NGCSVT2% 
findstr /B /L /V /C:"-----" %NGCSVT2% > %NGCSVT1% 
findstr /B /L /V /C:"The command" %NGCSVT1% > %NGCSVT2% 
REM ...make the last temporary copy the final copy and clean up 
COPY %NGCSVT2% %NGCSV% 
DEL %NGCSVT1% 
DEL %NGCSVT2% 
REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
REM ...Column 1 
for /F "tokens=1" %%A in (%NGCSV%) do @echo %GROUP%,%%A >> %NGFINAL% 
REM ...Column 2 
for /F "tokens=2" %%A in (%NGCSV%) do @echo %GROUP%,%%A >> %NGFINAL% 
REM ...Column 3 
for /F "tokens=3" %%A in (%NGCSV%) do @echo %GROUP%,%%A >> %NGFINAL% 
del %NGCSV% 
continue; rem Doesn't work 

:eof 
set /a c=c+1 
echo %c% 
+2

你能簡化你的問題嗎?究竟發生了什麼事情與你的預期? – 2014-10-06 08:49:18

+0

我不確定我可以。這個代碼基本上是兩個谷歌搜索相結合。當我剪掉一堆東西(比如內部循環)時,我得到了%NGFINAL%輸出(雖然沒有像我想要的那樣)。我現在已經更改爲我的原始版本了,我想找到一個「繼續」等價物更容易,而不是爲什麼循環中斷。 – Dird 2014-10-06 09:29:57

+0

在Windows批處理循環中可能出現[「continue」等效命令](http:// stackoverflow。 com/questions/36355490/continue-equivalent-command-in-nested-loop-in-windows-batch) – 2017-02-27 03:43:30

回答

3

continue;不是內部或外部命令。

EOF是CMD中的內部標籤,不需要包含。

測試此:

SET NGCSV=UserList3Col.csv 
SET NGCSVT1=UserList3Col.csv.temp1 
SET NGCSVT2=UserList3Col.csv.temp2 
SET NGFINAL=UserListFinal.csv 
del %NGFINAL% 
set /a c=0 
for /f "tokens=1" %%i in (groupList.txt) do call :processline %%i 
goto :continue 

:processline 
set /a c=c+1 
echo %c% 
SET GROUP=%* 
setlocal EnableDelayedExpansion 
net group /domain "GG-%GROUP%" > %NGCSV% 
REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
REM Now strip out the crap 
REM ...make a temporary copy 
COPY %NGCSV% %NGCSVT2% 
REM ...strip off the crap using alternating temp files 
findstr /B /L /V /C:"The request" %NGCSVT2% > %NGCSVT1% 
findstr /B /L /V /C:"Group name" %NGCSVT1% > %NGCSVT2% 
findstr /B /L /V /C:"Comment" %NGCSVT2% > %NGCSVT1% 
findstr /B /L /V /C:"Members" %NGCSVT1% > %NGCSVT2% 
findstr /B /L /V /C:"-----" %NGCSVT2% > %NGCSVT1% 
findstr /B /L /V /C:"The command" %NGCSVT1% > %NGCSVT2% 
REM ...make the last temporary copy the final copy and clean up 
COPY %NGCSVT2% %NGCSV% 
DEL %NGCSVT1% 
DEL %NGCSVT2% 
REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
REM ...Column 1 
for /F "tokens=1" %%A in (%NGCSV%) do @echo %GROUP%,%%A >> %NGFINAL% 
REM ...Column 2 
for /F "tokens=2" %%A in (%NGCSV%) do @echo %GROUP%,%%A >> %NGFINAL% 
REM ...Column 3 
for /F "tokens=3" %%A in (%NGCSV%) do @echo %GROUP%,%%A >> %NGFINAL% 
del %NGCSV% 
goto :EOF 
:continue 
echo this is reached after the entire file is parsed 
pause 

此代碼應以同樣的方式,不同的是!字符變成毒藥字符用來延遲擴展時工作了。

@echo off 
setlocal enabledelayedexpansion 
SET NGCSV=UserList3Col.csv 
SET NGCSVT1=UserList3Col.csv.temp1 
SET NGCSVT2=UserList3Col.csv.temp2 
SET NGFINAL=UserListFinal.csv 
del %NGFINAL% 2>nul 
del %NGCSV% 2>nul 
set /a c=0 
for /f "tokens=1" %%i in (groupList.txt) do (
set /a c=c+1 
echo !c! 
net group /domain "GG-%%i" |findstr /B /L /V /i /C:"The request" /C:"Group name" /C:"Comment" /C:"Members" /C:"-----" /C:"The command" > %NGCSV% 
REM ...Column 1 
for /F "tokens=1" %%A in (%NGCSV%) do >>%NGFINAL% echo %%i,%%A 
REM ...Column 2 
for /F "tokens=2" %%A in (%NGCSV%) do >>%NGFINAL% echo %%i,%%A 
REM ...Column 3 
for /F "tokens=3" %%A in (%NGCSV%) do >>%NGFINAL% echo %%i,%%A 
del %NGCSV% 
) 
pause 
+0

謝謝,雖然我寧願沒有在中間工作流程的結尾。那麼有沒有繼續相當於跳到下一個迭代呢? – Dird 2014-10-06 09:44:06

+1

它遍歷grouplist.txt文件 - 可能會讓你感到困惑的是,計數器只執行一次,因爲它在代碼中不清楚它應該做什麼。請參閱上面編輯的答案,以及應該以相同方式工作的備用代碼。 – foxidrive 2014-10-06 09:57:26

+0

我知道它迭代。通過「繼續」,我的意思是,在循環之前仍然會調用:每次迭代。我想知道是否有一種方法可以將eof部分保留在底部,在此之前有一條命令說:「不要繼續讀取文件,而是開始循環的下一次迭代」,就像「繼續」一樣。命令在大多數語言中都有。我喜歡那一行findtr雖然,將嘗試合併 – Dird 2014-10-06 12:11:00