【发布时间】:2022-01-15 13:23:50
【问题描述】:
我了解setlocal enabledelayedexpansion 的魔力;这让我更进一步,但我仍然不完全高兴。我现在可以将文件名分配给!loop variable!,但我无法在随后使用该变量。我尝试获取没有扩展名的文件名。一定还有其他我不知道的事情。
这是我现在的编码:
::process all files in directory
setlocal enabledelayedexpansion
for %%f in (C:\windows\*.ico) do (
echo F=%%f
set myname=%%f
echo.N=!myname!
call :strlen myLen "!myname!"
echo.myLen=!myLen!
set /A L=myLen-3 + 1
set str=!myname!
echo.str1=!str! L=!L!
set str=!str:~0,!L! ! <-Remove extension from filename
echo.str2=!str! <-This does not work!
)
这是我调用的输出:
F=C:\windows\AnyWeb Print.ico
N=C:\windows\AnyWeb Print.ico
Strlen C:\windows\AnyWeb Print.ico
myLen=25
str1=C:\windows\AnyWeb Print.ico L=23
str2=L <--- what went wrong ????
【问题讨论】:
-
老实说,学习 powershell。然后你就不必继续做我喜欢称之为 cmd 体操的事情,绞尽脑汁试图让一种基本缺乏的语言适应你的需要:-)
-
为什么不使用
for元变量的~-modifiers,例如%%~Nf获取基本名称,%%~Xf获取扩展名? N. B.: The Windows command prompt is NOT a DOS prompt!
标签: windows batch-file cmd