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