簡體   English   中英

批處理中的for循環中的變量

[英]variable in a for loop inside a batch

我將需要一些幫助來了解我想在目錄中循環查找哪些子目錄以某些特定字符結尾的奇怪行為。 我寫這個來測試:

@ECHO.
setlocal EnableDelayedExpansion 
set Dir=C:\test
for /f "tokens=*" %%I in ('dir %Dir% /ad /b') do (
set V1=%%I
set V2=!V1!
set V3=%V1%
set V4=%V1:~-4%
set V5=!V1:~-4!
)
endlocal

結果是:

C:>test


C:>setlocal EnableDelayedExpansion

C:>set Dir=C:\test

C:>for /F "tokens=*" %I in ('dir C:\test /ad /b') do (
set V1=%I
 set V2=!V1!
 set V3=
 set V4=~-4
 set V5=!V1:~-4!
)

C:>(
set V1=dir1_011
 set V2=!V1!
 set V3=
 set V4=~-4
 set V5=!V1:~-4!
)

C:>(
set V1=dir1_011 - Copie
 set V2=!V1!
 set V3=
 set V4=~-4
 set V5=!V1:~-4!
)

C:>(
set V1=dir1_011 - Copie (2)
 set V2=!V1!
 set V3=
 set V4=~-4
 set V5=!V1:~-4!
)

C:>(
set V1=dir1_011 - Copie (3)
 set V2=!V1!
 set V3=
 set V4=~-4
 set V5=!V1:~-4!
)

C:>(
set V1=dir1_011 - Copie (4)
 set V2=!V1!
 set V3=
 set V4=~-4
 set V5=!V1:~-4!
)

C:>(
set V1=dir1_011 - Copie (5)
 set V2=!V1!
 set V3=
 set V4=~-4
 set V5=!V1:~-4!
)

C:>(
set V1=dir1_011 - Copie (6)
 set V2=!V1!
 set V3=
 set V4=~-4
 set V5=!V1:~-4!
)

C:>(
set V1=dir1_011 - Copie (7)
 set V2=!V1!
 set V3=
 set V4=~-4
 set V5=!V1:~-4!
)

C:>(
set V1=dir1_011 - xxx
 set V2=!V1!
 set V3=
 set V4=~-4
 set V5=!V1:~-4!
)

C:>endlocal

C:>

即使使用EnableDelayedExpansion,我也永遠無法獲得目錄名稱的結尾

可能有人對此有解釋嗎?

使用延遲擴展的行可以正常工作,但是輸出中沒有任何內容可以顯示它。 您具有ECHO ON,但是在延遲擴展發生之前回顯了該行,因此您看不到結果。 嘗試添加如下行

echo V1=!V1!
echo V2=!V2!
etc.

在循環中查看延遲的擴展分配的結果。

當然,使用常規擴展的分配在循環中不起作用,這就是為什么發明了延遲擴展的原因。

您必須使用!var!變量!var! 而不是在循環內以及使用延遲擴展時的%var%

測試一下:

@echo off
setlocal EnableDelayedExpansion 
set Dir=C:\test
for /f "delims=" %%I in ('dir %Dir% /ad /b') do (
set V1=%%I
set V2=!V1!
echo !v2!
echo !v2:~-4!
)
endlocal
pause

暫無
暫無

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

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