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

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

本帖最后由 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
复制代码
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2
本人已死!不用联系!~
要联系下来联系!~~

  1. sed "3,$s/.*/;&/" 1.txt
复制代码
  1. sed "1,2s/^;//" 1.txt
复制代码
1

评分人数

TOP

  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

评分人数

    • jellyhk: 乐于助人!能解决问题!技术 + 1

TOP

回复 3# Demon
为什么要用set /a n=0?
set n=0一样么?
1

评分人数

本人已死!不用联系!~
要联系下来联系!~~

TOP

  1. gawk "{print (NR>2?\";\":\"\")$0}" 1.txt
复制代码
  1. gawk "{print substr($0,NR>2?1:2)}" 1.txt
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1
看得多说得多,远比不上写得多。

TOP

回复 4# jellyhk
一样,在此别无二致,只是从形象上来理解,加了/a后等号成了数值赋值运算符,没加的时候等号只是字符串赋值给变量的运算符而已,在此没什么区别,但是set/a a=aa时a只会是等于0。
看得多说得多,远比不上写得多。

TOP

为什么 =0呢set/a a=aa
本人已死!不用联系!~
要联系下来联系!~~

TOP

回复 7# jellyhk
因为开启了/a开关,等号右边就需要是有效地计算式,但aa不是有效的算式,规定设成0吧。
1

评分人数

看得多说得多,远比不上写得多。

TOP

回复 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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 2# CrLf
  1. sed "3,$s/^/;/" a.txt
复制代码
1

评分人数

    • CrLf: 学习了,感谢指点!PB + 5

TOP

回复 9# awk
大侠能否讲解一下你的awk程式,着实看不懂,特别是最后那个1,发现替换成其他数字也可以。谢谢~
看得多说得多,远比不上写得多。

TOP

回复 11# weichenxiehou


awk默认的action是print $0
只要是非0的条件它都会执行默认的action

TOP

回复 12# awk
哦,这么说我倒是明白了,后面又是一个pattern{action}搭配。gsub默认第三个参数为$0?第一个和第三个程式都是对$0进行处理,第二个之所以用printf是因为不会像printf默认输出ORS换行?代码还真是简洁……
看得多说得多,远比不上写得多。

TOP

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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

手机上,请原谅!
加分号:
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
1

评分人数

    • CrLf: 有点偏题了噢PB + 5
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

返回列表