[英]Windows 7 Batch File for loop
在這兩種情況下,該目錄包含三個名為test1.txt,test2.txt,test3.txt的文件
有人能解釋為什么這樣有效:
echo off
set CP=
for %%f in (*.txt) do (
call :concat %%f
)
echo %CP%
:concat
set CP=%CP%;%1
輸出:
C:\test>test
C:\test>echo off
;test1.txt;test2.txt;test3.txt
C:\test>
但這不是:
echo off
set CP=
for %%f in (*.txt) do (
set CP=set CP=%CP%;%%f
)
echo %CP%
輸出:
C:\test>test
C:\test>echo off
;test3.txt
C:\test>
它與延遲擴展有關。
例如,這將像您的第一個示例一樣工作:
echo off
SETLOCAL EnableDelayedExpansion
set CP=
for %%f in (*.txt) do (
set CP=!CP!;%%f
)
echo %CP%
ENDLOCAL
啟用延遲擴展時,變量包圍!
在每次迭代時評估,而不是僅在解析循環時第一次(這是解析用%
包圍的變量的方式)。
您的第一個示例有效,因為處理是在CALL
語句中完成的,該語句將控制權傳遞給批處理文件的另一個段,該段在技術上位於循環之外,因此每次執行時都會對其進行單獨解析。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.