从for循环中的文件名中提取子字符串

时间:2012-12-17 08:50:04

标签: windows batch-file

我正在尝试在当前文件夹中获取文件名的子字符串。稍后我将把这些作为参数传递给某个命令但是现在我甚至无法使回声起作用:

setlocal EnableDelayedExpansion

for %%f in (*.mvx) do (
  set a=%%f
  echo %a%
  echo %%a%%
  echo %a:~3,8%
)
endlocal
pause

产生这种结果:

C:\1>(
set a=xx-20121213-mvl-0005.mvx
 echo
 echo %a%
 echo ~3,8
)
ECHO is on.
%a%
~3,8

最后一个应该返回“20121213”。

1 个答案:

答案 0 :(得分:1)

您需要使用延迟扩展来回显变量,因为您已在for循环中设置它们。

您已经包含该行以启用它,您只需将%转换为!

setlocal EnableDelayedExpansion

for %%f in (*.mvx) do (
  set a=%%f
  echo !a!
  echo !a:~3,8!
)
endlocal
pause

更新

要将整个脚本放在一行cmd命令上,您可以使用

cmd /v:on /c "for %f in (*.mvx) do set a=%f && echo !a! && echo !a:~3,8! && pause"