[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

有一个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出来。
求大佬帮助解决。

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

TOP

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



    是的,您说的对。所以我想解决的就是这个问题,也就是在for循环中判断循环变量是否为空,如为空就不显示,不为空就显示。

TOP

由于预处理的原因,echo,%%c,输出时%%只会显示一个%。

TOP

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

TOP

返回列表