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

[文本处理] [分享]超过52列文本提取

[复制链接]
发表于 2016-10-13 21:15:43 | 显示全部楼层 |阅读模式
前言:群内很多人都需要文本分列,发到论坛更有助于其他坛友来处理一些简单的文本,代码简单如果有助于学习请点赞,无用留个代码垃圾
注:不可超过set设定最大数值不可用于特殊字符处理特殊字符
  1. @echo off&setlocal enabledelayedexpansion
  2. set a=值或for内引用
  3. rem:循环次数
  4. for /l %%n in (1,1,4196)do (
  5. rem:分隔符不受引号影响比for无参数分裂更有优势
  6. for /f "tokens=1,* delims=;" %%i in ("!a!")do (
  7.   rem:设置循环变量
  8.   set "a=%%j"
  9.   rem:最终值
  10.   echo,%%i
  11. )
  12. )
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 +1

查看全部评分

发表于 2017-2-27 17:35:30 | 显示全部楼层

  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.         call :loop "%%a"
  4. )
  5. pause

  6. :loop
  7. for /f "tokens=1* delims=\;-[])( " %%i in ("%~1") do (
  8.         if not "%%j"=="" (
  9.                 call :loop "%%j"
  10.         ) else (
  11.                 echo;%%i
  12.         )
  13. )
  14. goto :eof
复制代码
请问下,楼主为什么指定4196,有特别含义吗,如果已经满足条件了还是会一直循环4196次?
发表于 2017-2-27 18:02:49 | 显示全部楼层
 楼主| 发表于 2017-2-27 20:05:59 | 显示全部楼层
本帖最后由 /zhqsystem/zhq 于 2017-2-27 20:16 编辑

回复 2# taofan712
set受字符数限制8192,8192/2=4096,最大支持列为4096,没有别的含义,
执行是执行了剩余的所有for,但是由于变量被替换了空值,导致for为空无意义被自动过滤,可以序列for可以加入一个判断循环变量存在执行后边的,
if defined a for /f....
发表于 2017-2-28 09:23:54 | 显示全部楼层
http://bbs.bathome.net/thread-5548-1-1.html#pid35781
能否讲解一下跟这个代码相比有什么优势和劣势?
 楼主| 发表于 2017-2-28 21:53:01 | 显示全部楼层
回复 5# GNU
和这个比没有优势,只是少占用了SET序列化和死循环,%%n的值属于固定值而且是固定列,xls数据需要替换分割符"TABTAB=tab tab"两次才能对其进行实际的简单操作,醉了没做过练习题,看来是发重了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 15:09 , Processed in 0.018488 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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