String 如何在批处理的循环中拆分字符串
通常,我想对循环中的一些变量执行一些操作,变量的数量可能会发生变化,我尝试了如下示例: 设置标题1=appdef1.hString 如何在批处理的循环中拆分字符串,string,batch-file,String,Batch File,通常,我想对循环中的一些变量执行一些操作,变量的数量可能会发生变化,我尝试了如下示例: 设置标题1=appdef1.h 设置标题2=appdef2.h 设置标题3=appdef3.h 设置标题=“%header1%%header2%%header3%” 对于/f“delims=“%%i in(%headers%)执行回显%%i 停顿 虽然它只输出“appdef.h”,但令人困惑 得到了解决方案: @echo off set header1=appdef1.h set header2=appdef
设置标题2=appdef2.h
设置标题3=appdef3.h
设置标题=“%header1%%header2%%header3%”
对于/f“delims=“%%i in(%headers%)执行回显%%i
停顿 虽然它只输出“appdef.h”,但令人困惑 得到了解决方案:
@echo off
set header1=appdef1.h
set header2=appdef2.h
set header3=appdef3.h
set headers= "%header1% %header2% %header3%"
for /f "tokens=* delims= " %%i in (%headers%) do call :lable %%i
goto END
:lable
if "%1"=="" (
echo the end
goto END
)
echo %1
shift
goto lable
:END
pause
这应该满足您的要求:
set header1=appdef1.h
set header2=appdef2.h
set header3=appdef3.h
set headers=%header1% %header2% %header3%
for %%i in (%headers%) do echo %%i
pause
您的原始代码仅将1参数作为%%i传递,您的修复程序将其作为%1、%2%3传递给:lable,然后将其拆分
我的代码使用每个参数调用echo%%i一次
c:\>set header1=appdef1.h
c:\>set header2=appdef2.h
c:\>set header3=appdef3.h
c:\>set headers=appdef1.h appdef2.h appdef3.h
c:\>for %i in (appdef1.h appdef2.h appdef3.h) do echo %i
c:\>echo appdef1.h
appdef1.h
c:\>echo appdef2.h
appdef2.h
c:\>echo appdef3.h
appdef3.h
c:\>pause
Press any key to continue . . .
不幸的是,如果其中一个
头
变量中有*的话,这将不起作用。