我对.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
这看起来很奇怪的是,在助手功能,你仍然可以使用%%a
的echo %%i>File_%%a
。
这就是所有当前的FOR循环内部都可以看到所有当前使用的FOR参数(即使它们看起来不相关)的效果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句