在bat的for循环中,一列数据分隔后数量不确定,一般只输出第一个,如果需要对分隔出的每个值进行处理,则需要进行一列变多行的处理,上代码:
方法一(推荐):
@echo off&title 字符串切割
set string=aaa/bbb/ccc
:split
rem 把要切割字符串按照/符号分割开,并取得分割后的第一个的值
rem 再把分割后的剩下的值重赋予环境变量string,并重新执行for
rem 第一次 %string%=aaa/bbb/cc
rem 第二次 %string%=bbb/ccc
rem 第三次 %string%=ccc
rem 第四次 %string%=空,结束goto,退出
for /f "tokens=1,* delims=/" %%i in ("%string%") do (
echo %%i
set string=%%j
)
if not "%string%"=="" goto split
pause
方法二(分隔符先替换为换行符):
rem for /l "delims=;" %%i in ("aa;bb;cc") do echo %%i
setlocal EnableDelayedExpansion
set LF=^
set "var=1 2 3 4 5"
set "var=%var: =!LF!%"
for /F %%i in ("!var!") do (
echo %%i
)
===============
从文件读取内容到变量,文件存储格式为ansi,如为utf8为乱码。
方法一
for /f %%i in (.\tmp.txt) do (echo %%i) & echo %%i
方法二
set /P OEM=<tmp.txt