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

[文本处理] [已解决]BAT批处理怎样在一行中,提取多个变量?

[复制链接]
发表于 2014-3-11 17:24:04 | 显示全部楼层 |阅读模式
本帖最后由 lky216 于 2014-3-15 09:21 编辑

需要操作的文件1.txt内容是
192.168.1.1,192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6,192.168.1.7,
只有一行,这样子的循环下去的,可能有200多个,鄙人用for i到z只能提取几个而已,
求教如何提取呢


解决方法:
1.gawk "gsub(/,/,\"\n\")" a.txt
2.sed "s/,/\n/g" a.txt
3.
  1. @echo off
  2. set /p str=<a.txt
  3. for %%i in (%str%) do (
  4.     echo %%i
  5. )
复制代码
4.
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do set "str=%%i"
  3. echo !str:,=^

  4. !
  5. pause
复制代码
感谢DAIC,感谢PowerShell,感谢terse

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-3-11 18:47:36 | 显示全部楼层
在powershell中,提取变量是这样做的:
1 按 [,]   切割字符串,结果成为一个数组,数组长度几万没问题。
  1. $aaa = "192.168.1.1,192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6,192.168.1.7" -split ","
复制代码

$aaa[0] = 192.168.1.1
$aaa[1] = 192.168.1.2

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2014-3-11 18:51:37 | 显示全部楼层
回复 2# PowerShell


    哈哈,公司2003系统还没升级2012呢,不过今年会升级,我回去先测试看看,等升级2012后再用,谢谢了
发表于 2014-3-12 21:56:49 | 显示全部楼层
  1. sed "s/,/\n/g" a.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
lky216 + 1 乐于助人

查看全部评分

发表于 2014-3-12 21:57:25 | 显示全部楼层
  1. gawk "gsub(/,/,"\n")" a.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2014-3-12 22:49:17 | 显示全部楼层
  1. @echo off
  2. set /p str=<a.txt
  3. for %%i in (%str%) do (
  4.     echo %%i
  5. )
复制代码
发表于 2014-3-13 07:04:42 | 显示全部楼层
回复 6# DAIC


    我试了下,最多85个,再多就出不来了
发表于 2014-3-13 19:20:50 | 显示全部楼层
回复 7# zhanglei1371


    把你的a.txt压缩,传上来,我试试。
 楼主| 发表于 2014-3-13 20:31:29 | 显示全部楼层
回复 4# DAIC


    for /f %i in ('sed -e "s/,/\n/g" a.txt') do echo %i

这样子好像也是输出一行的呀,烦请指教~
 楼主| 发表于 2014-3-13 20:33:56 | 显示全部楼层
回复 5# DAIC


    gawk "gsub(/,/,\"\n\")" a.txt

这个可以,谢谢您~
 楼主| 发表于 2014-3-13 20:37:30 | 显示全部楼层
回复 7# zhanglei1371


    我测试了,是86行,85行是正常的,192.168.1.1这样的,第86行只有显示192。不过多学习了一种方法,赞
发表于 2014-3-13 20:42:43 | 显示全部楼层
回复 9# lky216


    4楼代码直接执行就行了,你为什么要改成这样?
发表于 2014-3-13 23:20:16 | 显示全部楼层
确定“,”为分割 那就直接替换
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do set "str=%%i"
  3. echo !str:,=^

  4. !
  5. pause
复制代码

评分

参与人数 2技术 +2 收起 理由
lky216 + 1 电脑问题,sorry
Batcher + 1 乐于助人

查看全部评分

发表于 2014-3-13 23:40:16 | 显示全部楼层
奇怪,那天测试只打印到85个,今天再测试全都可以了
发表于 2014-3-14 02:19:55 | 显示全部楼层
回复 14# zhanglei1371
先前你是否用的这个 set /p str=<a.txt
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 03:03 , Processed in 0.034781 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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