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

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

本帖最后由 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
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

在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

评分人数

脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 2# PowerShell


    哈哈,公司2003系统还没升级2012呢,不过今年会升级,我回去先测试看看,等升级2012后再用,谢谢了

TOP

  1. sed "s/,/\n/g" a.txt
复制代码
1

评分人数

TOP

  1. gawk "gsub(/,/,\"\n\")" a.txt
复制代码
1

评分人数

TOP

  1. @echo off
  2. set /p str=<a.txt
  3. for %%i in (%str%) do (
  4.     echo %%i
  5. )
复制代码

TOP

回复 6# DAIC


    我试了下,最多85个,再多就出不来了

TOP

回复 7# zhanglei1371


    把你的a.txt压缩,传上来,我试试。

TOP

回复 4# DAIC


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

这样子好像也是输出一行的呀,烦请指教~

TOP

回复 5# DAIC


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

这个可以,谢谢您~

TOP

回复 7# zhanglei1371


    我测试了,是86行,85行是正常的,192.168.1.1这样的,第86行只有显示192。不过多学习了一种方法,赞

TOP

回复 9# lky216


    4楼代码直接执行就行了,你为什么要改成这样?

TOP

确定“,”为分割 那就直接替换
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do set "str=%%i"
  3. echo !str:,=^
  4. !
  5. pause
复制代码
2

评分人数

TOP

奇怪,那天测试只打印到85个,今天再测试全都可以了

TOP

回复 14# zhanglei1371
先前你是否用的这个 set /p str=<a.txt

TOP

返回列表