Board logo

标题: [文本处理] 批处理如何判断循环变量是否为空的难题 [打印本页]

作者: binghejin    时间: 2021-9-7 23:40     标题: 批处理如何判断循环变量是否为空的难题

有一个1.txt文件,每行内容由*分割成N个部分(不超过26个):
111*222*333*444*555*666*777
111*222*333*444*555*666*777
111*222*333*444*555*666*777
111*222*333*444*555*666*777
......
现在批处理中想按要求取出其中某列或某几列内容,我用的FOR命令如下:
for /f "tokens=1,4 delims=*" %%a in (1.txt) do (echo %%a %%b)
在具体使用过程当中,发现需求经常会变化,有时候需要第1列和第4列,有时候又需要第5列至第7列,有时候甚至需要将第1列至最后1列全部显示,想出了如下代码:

set cx=1,5(其实就是想在使用中只修改此处即可达到目的,循环变量有内容就显示,无内容就不显示)
for /f "tokens=%cx% delims=*" %%a in (1.txt) do (
if not "%%a"=="" echo %%a
if not "%%b"=="" echo %%b
if not "%%c"=="" echo %%c
......
if not "%%z"=="" echo %%z
)

但在实际使用过程中发现,if并没有进行变量是否为空的判断,例如循环变量%%c为空,实际上会输出一个%c出来。
求大佬帮助解决。
作者: qixiaobin0715    时间: 2021-9-8 10:59

tokens=1,5表示取分隔的字符第1,5两列,分别赋值给循环变量%%a和%%b,%%c未赋值。if语句中的“%%c”就会被认定为普通字符串,当然就不会是nul了。
作者: qixiaobin0715    时间: 2021-9-8 12:00

由于预处理的原因,echo,%%c,输出时%%只会显示一个%。
作者: binghejin    时间: 2021-9-8 12:48

由于预处理的原因,echo,%%c,输出时%%只会显示一个%。
qixiaobin0715 发表于 2021-9-8 12:00



    是的,您说的对。所以我想解决的就是这个问题,也就是在for循环中判断循环变量是否为空,如为空就不显示,不为空就显示。
作者: qixiaobin0715    时间: 2021-9-8 13:30

回复 4# binghejin
你的代码只定义了两个循环变量%%a,%%b,如果是a-z的话应当是tokens=1-26




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2