如何在循环.bat中使用循环变量

谢尔盖·克拉西尔尼科夫(Sergey Krasilnikov)

我对.bat有问题

@echo off
    set NAMEFILE=version

rem counting commas
set "f=%VERSION%"
set "vz=,"
set /a "z=0,n=0"
for /f "delims=" %%a in ('findstr /r /c:"\%vz%" "%f%"') do set "s=%%a"& call :#
<+ (for /f "tokens=1,2 delims==" %%b in ('more') do set /a "z+=%%b")& del+

set /a z =%z% + 1

rem cycle with problem
rem tokens=%%a* - part of the code that contains the problem
for /l %%a in (1,1,%z%) do for /f "tokens=%%a* delims=," %%i in (%NAMEFILE%) do @echo %%i>File_%%a.vers


:#
 setlocal enabledelayedexpansion 2>nul
  for %%a in ("!s:~%n%,1!") do (

   if "%%~a"=="%vz%" set /a z+=1
   if not "%%~a"=="" set /a n+=1& goto #
  )
 endlocal
exit /b

我不知道该如何处理“ tokens = %% a”。它没有看到变量%% a,可能是由于“%”符号引起的。我认为它必须逃脱或类似的事情。如果您可以帮助,请帮助。

吉布

您不能在FOR命令的选项部分中使用延迟扩展或FOR参数扩展IF也是如此
这是由批处理解析器处理它们的方式引起的。

但正如前面所说,只有参数扩展和延迟扩展失败,扩展百分比仍然有效。

但是在您的示例中,您不能内联使用它,您需要构建一个辅助函数。

...
for /l %%a in (1,1,%z%) do call :helper_func %%a
...


:helper_func
for /f "tokens=%1* delims=," %%i in (%NAMEFILE%) do @echo %%i>File_%%a.vers

这看起来很奇怪的是,在助手功能,你仍然可以使用%%aecho %%i>File_%%a
这就是所有当前的FOR循环内部都可以看到所有当前使用的FOR参数(即使它们看起来不相关)的效果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章