簡體   English   中英

Windows 7批處理文件for循環

[英]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.

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