[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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
本人已死!不用联系!~
要联系下来联系!~~

本帖最后由 Hello123World 于 2011-12-13 12:35 编辑

回复 16# CrLf


eol=;这种默认设置,在delims=;时变得无效

For /f "delims=;" %%i in (ip.txt) do echo %%i
For /f "eol=; delims=;" %%i in (ip.txt) do echo %%i
都是可以输出的。

For /f %%i in (ip.txt) do echo %%i 却输出为空。

TOP

回复 14# Hello123World


回复 15# cjiabing


    别忘了默认情况下,for /f 隐含了 eol=; 的条件,会跳过以分号开头的行,我想这可能是楼主疑惑的原因之一。

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

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

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

TOP

回复 11# weichenxiehou


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

TOP

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

TOP

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

评分人数

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

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

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

评分人数

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

TOP

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

TOP

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

TOP

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

评分人数

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

TOP

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

评分人数

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

TOP

返回列表