2012-07-11 174 views
1

下面是我的腳本。我正在試着查看下面一層的文件夾,只挑出那些文件夾,因此〜-9從路徑中提取最後9個字符。但是set var =不會取消設置變量,因爲輸出會以相同的文件夾名稱重複出現#次。另外批量不允許我直接在%% i上執行此提取技巧,因此需要本地變量。未設置for循環的批處理腳本變量無效

如何清除此變量,以便在下一次迭代中使用新值?

@echo off 
for /d %%i in (%1\*) do (
    set var=%%i 
    echo %var:~-9% 
    set "var=" 
) 

回答

2

http://judago.webs.com/variablecatches.htm對我的問題有一個解釋。神奇的線條是setlocal enabledelayedexpansion和調用var作爲回聲!var:〜-9 !. ! vs%...哇! cmd仍令我驚歎。

+0

+1,好工作找你的問題的根源。如果名稱包含'!',你仍然有[潛在問題](http://stackoverflow.com/a/11440780/1012053)。 – dbenham 2012-07-11 20:20:02

0

您發現問題的根源以及解決方案 - 延遲擴展。

但是,如果任何文件名包含!字符,則在啓用延遲擴展時啓用FOR會導致問題。如果變量%%i的值包含!並且啓用延遲擴展,則擴展將會被破壞。這不是一個常見的問題,但它會發生。

的解決方案是開啓和關閉延遲擴展循環

@echo off 
setlocal disableDelayedExpansion 
for /d %%i in (%1\*) do (
    set var=%%i 
    setlocal enableDelayedExpansion 
    echo !var:~-9! 
    endlocal 
) 

我也想知道您意思內「我試圖尋找到下一級文件夾,只有那些挑出來文件夾,因此〜-9從路徑「中提取最後9個字符。我懷疑你正在試圖獲取子文件夾的名字,沒有領先的路徑信息。如果是這樣,那麼使用子串操作並不是一個好的解決方案,因爲文件夾名稱的長度是變化的。

有一個很簡單的方法來獲取文件夾的名稱沒有完整路徑信息:

for /d %%i in (%1\*) do echo %%~nxi 
相關問題