我的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