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

[文本处理] [已解决]批处理如何实现从文本指定行开始每行开头加分号?

[复制链接]
发表于 2011-12-10 21:51:14 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-11-17 12:36 编辑

文件ip.txt里[文件内容要可变]
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
复制代码
1:从第3行开始每行加分号;其他不变---得到结果
  1. 1
  2. 2
  3. ;3
  4. ;4
  5. ;5
  6. ;6
  7. ;7
  8. ;8
  9. ;9
复制代码
问题2:如何把取消前2行前的分号;其他不变!
  1. ;1
  2. ;2
  3. ;3
  4. ;4
  5. ;5
  6. ;6
  7. ;7
  8. ;8
  9. ;9
复制代码

评分

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

查看全部评分

发表于 2011-12-10 23:35:17 | 显示全部楼层
  1. sed "3,$s/.*/;&/" 1.txt
复制代码
  1. sed "1,2s/^;//" 1.txt
复制代码

评分

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

查看全部评分

发表于 2011-12-11 00:29:07 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a n = 0
  4. (for /f %%i in (ip.txt) do (
  5.     set /a n = n + 1
  6.     if !n! geq 3 (
  7.         echo ;%%i
  8.     ) else (
  9.         echo %%i
  10.     )
  11. )) > 1.txt
  12. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
jellyhk + 1 乐于助人!能解决问题!

查看全部评分

 楼主| 发表于 2011-12-11 11:12:08 | 显示全部楼层
回复 3# Demon
为什么要用set /a n=0?
set n=0一样么?

评分

参与人数 1PB +3 收起 理由
CrLf + 3 好学

查看全部评分

发表于 2011-12-11 11:23:17 | 显示全部楼层
  1. gawk "{print (NR>2?";":"")$0}" 1.txt
复制代码
  1. gawk "{print substr($0,NR>2?1:2)}" 1.txt
复制代码

评分

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

查看全部评分

发表于 2011-12-11 11:29:21 | 显示全部楼层
回复 4# jellyhk
一样,在此别无二致,只是从形象上来理解,加了/a后等号成了数值赋值运算符,没加的时候等号只是字符串赋值给变量的运算符而已,在此没什么区别,但是set/a a=aa时a只会是等于0。
 楼主| 发表于 2011-12-11 13:22:24 | 显示全部楼层
为什么 =0呢set/a a=aa
发表于 2011-12-11 13:39:26 | 显示全部楼层
回复 7# jellyhk
因为开启了/a开关,等号右边就需要是有效地计算式,但aa不是有效的算式,规定设成0吧。

评分

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

查看全部评分

发表于 2011-12-11 14:05:09 | 显示全部楼层
回复 5# weichenxiehou


1:
  1. gawk "NR>2{gsub(/^/,";")}1" a.txt
复制代码
  1. gawk "NR>2{printf ";"}1" a.txt
复制代码
  1. gawk "NR>2{$0=";"$0}1" a.txt
复制代码

评分

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

查看全部评分

发表于 2011-12-11 14:08:02 | 显示全部楼层
回复 2# CrLf
  1. sed "3,$s/^/;/" a.txt
复制代码

评分

参与人数 1PB +5 收起 理由
CrLf + 5 学习了,感谢指点!

查看全部评分

发表于 2011-12-11 16:48:54 | 显示全部楼层
回复 9# awk
大侠能否讲解一下你的awk程式,着实看不懂,特别是最后那个1,发现替换成其他数字也可以。谢谢~
发表于 2011-12-11 22:13:37 | 显示全部楼层
回复 11# weichenxiehou


awk默认的action是print $0
只要是非0的条件它都会执行默认的action
发表于 2011-12-11 22:52:58 | 显示全部楼层
回复 12# awk
哦,这么说我倒是明白了,后面又是一个pattern{action}搭配。gsub默认第三个参数为$0?第一个和第三个程式都是对$0进行处理,第二个之所以用printf是因为不会像printf默认输出ORS换行?代码还真是简洁……
发表于 2011-12-12 13:15:35 | 显示全部楼层
1.
  1. @echo off&SetLocal EnableDelayedExpansion
  2. Set n=1
  3. (For /f %%i in (ip.txt) do (
  4.         If !n! geq 3 (echo.;%%i) else (echo %%i)
  5.         Set /a n+=1)
  6.         )>11.txt
  7. start 11.txt
  8. pause>nul
复制代码
.


2.
  1. @echo off&SetLocal EnableDelayedExpansion
  2. Set n=1
  3. (For /f "delims=;" %%i in (ip.txt) do (
  4.         If !n! leq 2 (echo.%%i) else (echo ;%%i)
  5.         Set /a n+=1)
  6.         )>11.txt
  7. start 11.txt
  8. pause>nul
复制代码

评分

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

查看全部评分

发表于 2011-12-12 15:45:26 | 显示全部楼层
手机上,请原谅!
加分号:
for /f "skip=2 delims="  %%a in (a.txt) do echo ;%%a

去分号:
用findstr也可以
for  /f "tokens=1* delims=:;"  %%a in (a.txt) do (

f %%a==1

评分

参与人数 1PB +5 收起 理由
CrLf + 5 有点偏题了噢

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 15:41 , Processed in 0.022687 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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