簡體   English   中英

我可以使用Windows批處理腳本使用For循環來迭代多行文件並運行多個命令

[英]Using Windows Batch Script Can I Use A For Loop To Iterate Multi-Line File And Run Multiple Commands

我想迭代一個包含Windows目錄列表的純文本文件,並針對每行運行多個命令,將每行分配給一個變量。 然后,我想將每個命令的每個結果輸出回送到以逗號分隔的文件中。 是的,我知道批處理編程可能不是最佳選擇,但目前有所限制。 這是我要面對的地方:

@echo off
setlocal
SETLOCAL ENABLEDELAYEDEXPANSION

:: There could be spaces in the filename, thus using delims
FOR /f "delims=?" %%a in (e:\multiline_textfile.txt) do (
set filename=%%a
CALL :PROG1
CALL :PROG2
CALL :PROG3
CALL :ENDPROG

:PROG1
FOR /f "delims=?" %%h in ('e:\apps\exe1.exe -s "!filename!"') do set result11=%%h

:PROG2
FOR /f "delims=?" %%i in ('e:\apps\exe1.exe -b"!filename!"') do set result2=%%i

:PROG3
FOR /f "delims=?" %%j in ('e:\apps\exe2.exe -c "!filename!"') do set result3=%%j

:ENDPROG
echo !result1!,!result2!,!result3!
)

---

任何見識將不勝感激。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

:: There could be spaces in the filename, thus using delims
FOR /f "delims=" %%a in (e:\multiline_textfile.txt) do (
set "filename=%%a"
CALL :PROG1
CALL :PROG2
CALL :PROG3
CALL :ENDPROG
)
echo here endeth your batch mainline
goto :eof

:PROG1
FOR /f "delims=" %%h in ('e:\apps\exe1.exe -s "!filename!"') do set "result1=%%h"
goto :eof

:PROG2
FOR /f "delims=" %%i in ('e:\apps\exe1.exe -b"!filename!"') do set "result2=%%i"
goto :eof

:PROG3
FOR /f "delims=" %%j in ('e:\apps\exe2.exe -c "!filename!"') do set "result3=%%j"
goto :eof

:ENDPROG
echo !result1!,!result2!,!result3!
goto :eof

您不需要初始的SETLOCAL一個就足夠了。

標簽只是批處理程序中的MARKERS-它們不會影響流程。 CALL ed例程中返回的最常見方法是GOTO :EOF ,其中需要使用冒號,並且標簽:EOF是隱式的,不應聲明。

試圖像這樣在FOR循環中使用標簽的想法很糟糕。 可能適用於更高版本,但不適用於早期版本。 請注意, FOR循環的結尾已移動...

!var! 可以正常工作,在這種情況下沒有必要,因為每個子例程本質上都是一個全新的程序,它繼承了CALL處的主要環境。 因此每個!var! 可以用%var%代替,而SETLOCAL ENABLEDELAYEDEXPANSION只需是SETLOCAL 您只需要使用延遲擴展,即可在復合語句中更改后使用普通環境變量的值(例如,多行的FOR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM