我的Windows批處理文件應該讀取文件名,並創建一個根據文件名的第2至5字母命名的目錄:通過在Windows中使用組字符串值循環在cmd
for %%f in (.\*.txt) do (
set string=%%~nf
mkdir %string:~2,5%
)
「字符串的值'雖然沒有更新,即它在循環的每一步中都是相同的。我怎樣才能更新它?
這是CMD輸出:
>for %f in (.\*.txt) do (
set string=%~nf
mkdir le3
)
>(
set string=file1
mkdir le3
)
>(
set string=file2
mkdir le3
)
A subdirectory or file le3 already exists.
>(
set string=file3
mkdir le3
)
A subdirectory or file le3 already exists.
嘗試在SO約'delayedexpansion'諮詢數百篇文章。實質上,當代碼塊被解析時,代碼塊中的'%var%'被替換爲'var'的值。要訪問塊內的變化值,首先要使用'setlocal enabledelayedexpansion'命令調用'delayedexpansion',然後使用'!var!'訪問變量的動態值。 – Magoo
謝謝你的回覆。我諮詢過幾個網站,例如(鏈接)(http://stackoverflow.com/questions/6679907/how-do-setlocal-and-enabledelayedexpansion-work)並提出了'SETLOCAL ENABLEDELAYEDEXPANSION for %% f in(。\ *。txt)do(set !string!= %%〜nf mkdir!string:〜2,5!)' - 但延遲擴展似乎還沒有工作。你有什麼建議嗎? – Joan
'set!string!= %%〜nf'應該是'set string = %%〜nf' - 您打算設置變量'string',而不是變量'string的當前內容' – Magoo