String 如何在批处理的循环中拆分字符串

String 如何在批处理的循环中拆分字符串,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

通常,我想对循环中的一些变量执行一些操作,变量的数量可能会发生变化,我尝试了如下示例:

设置标题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=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 . . . 

不幸的是,如果其中一个
变量中有*的话,这将不起作用。