找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 17459|回复: 4

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

[复制链接]
发表于 2021-9-7 23:40:12 | 显示全部楼层 |阅读模式
有一个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出来。
求大佬帮助解决。
发表于 2021-9-8 10:59:09 | 显示全部楼层
tokens=1,5表示取分隔的字符第1,5两列,分别赋值给循环变量%%a和%%b,%%c未赋值。if语句中的“%%c”就会被认定为普通字符串,当然就不会是nul了。
发表于 2021-9-8 12:00:43 | 显示全部楼层
由于预处理的原因,echo,%%c,输出时%%只会显示一个%。
 楼主| 发表于 2021-9-8 12:48:29 | 显示全部楼层
由于预处理的原因,echo,%%c,输出时%%只会显示一个%。
qixiaobin0715 发表于 2021-9-8 12:00



    是的,您说的对。所以我想解决的就是这个问题,也就是在for循环中判断循环变量是否为空,如为空就不显示,不为空就显示。
发表于 2021-9-8 13:30:56 | 显示全部楼层
回复 4# binghejin
你的代码只定义了两个循环变量%%a,%%b,如果是a-z的话应当是tokens=1-26
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 23:38 , Processed in 0.026790 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表