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

[文本处理] 【已解决】批处理如何获取txt文本中某行某列的内容/指定行指定列的内容

[复制链接]
发表于 2013-11-6 16:49:54 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2018-4-13 11:34 编辑

每次碰到问题之后,就是用搜索功能,发现了很多教程以及编写代码技巧,但是一直以来没有找到这个问题的答案:
就是如何获取文本中具体的某行某列。
例如:
文本内容为:
aaa
bbb
ccc
只想要获取aaa,怎么办?
静待高手指点,谢谢!

评分

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

查看全部评分

发表于 2013-11-6 17:00:05 | 显示全部楼层
  1. @echo off
  2. set /p str=<a.txt
  3. echo,%str%
  4. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
tester + 1 在需要第一行内容时,代码很管用

查看全部评分

发表于 2013-11-6 18:11:29 | 显示全部楼层
用powershell获取(某指定行号)行的内容,或者m行到n行的内容,或许可以说是最简单的。
  1. (type a.txt)[0]
  2. (type a.txt)[0..5]
复制代码
 楼主| 发表于 2013-11-7 09:59:24 | 显示全部楼层
回复 3# PowerShell


    只看代码确实是简单,只是我这菜鸟还不会powershell,等学习了之后再看了,目前还是希望通过bat来实现,不过依然很感谢。
 楼主| 发表于 2013-11-7 10:01:28 | 显示全部楼层
本帖最后由 tester 于 2013-11-7 10:16 编辑

回复 2# DAIC


    经过测试,确实发现是获取到了aaa字符,非常感谢。
   昨天发帖子的时候本来还想是不是要说通过for语句来实现呢,因为看到很多的文本处理都是通过for语句来实现的,但for语句仅限于实现列的选取,无法具体到某行某列,比如:只获取上述文件中的bbb,不知道理解是否正确?
   另外,是否有方法以此获取到每一行的内容,因为上述代码只是实现了获取到第一行的aaa。因为刚开始学习bat,很多还不太熟悉,再次感谢
 楼主| 发表于 2013-11-7 10:32:26 | 显示全部楼层
经过再次搜索,发现了set+重定向的方法来获取具体行的内容,例如:
  1. @echo off
  2.   set line=2
  3. (for /l %%a in (1 1 %line%) do set /p doc=)<test.txt
  4. set doc
  5. echo %doc%
  6. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
yhcfsr + 1 写的好

查看全部评分

发表于 2013-11-7 10:51:00 | 显示全部楼层
回复 5# tester


方法1
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do (
  3.     if "%%i" equ "bbb" (
  4.         set "str=%%i"
  5.     )
  6. )
  7. echo,%str%
  8. pause
复制代码

评分

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

查看全部评分

发表于 2013-11-7 10:52:08 | 显示全部楼层
回复 5# tester


方法2
  1. @echo off
  2. for /f "skip=1" %%i in (a.txt) do (
  3.     set "str=%%i"
  4.     goto :next
  5. )

  6. :next
  7. echo,%str%
  8. pause
复制代码

评分

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

查看全部评分

发表于 2013-11-7 11:05:04 | 显示全部楼层
列是指用空格分开的字段
  1. @echo off & setlocal enabledelayedexpansion
  2. set/p x=第几行:
  3. set/p y=第几列:
  4. for /f "tokens=%y%delims= " %%i in (aa.txt) do (
  5.     set/a n+=1
  6.     if !n! equ !x! echo,%%i
  7. )
  8. pause
复制代码

评分

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

查看全部评分

 楼主| 发表于 2013-11-7 13:44:18 | 显示全部楼层
回复 8# DAIC


    多谢DAIC回复,两种方法都可行, 再次感谢!
 楼主| 发表于 2013-11-7 13:49:43 | 显示全部楼层
回复 9# foxJL


    难道24小时之内只能评分一次?无法给加分了,你给出的思路很好,学习了,多谢多谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 22:41 , Processed in 0.025640 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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