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

[文本处理] 批处理如何修改文件中每行的第一个字符?

文本:
un        Part1 上篇               
pa                        
1        How are you.        你好。        1.MP3        
2        As you wish.        如你所愿。        2.MP3        
3        Be careful.        小心。        3.MP3        
4        Excuse me.        对不起。        4.MP3        
5        Congratulations!        祝贺!        5.MP3        
。。。后面还有很多

我想把它前面的序号都增加1,如果第一个字符串是un 或者 pa 的话,这一行不做处理,改成:

un        Part1 上篇               
pa                        
2        How are you.        你好。        1.MP3        
3        As you wish.        如你所愿。        2.MP3        
4        Be careful.        小心。        3.MP3        
5        Excuse me.        对不起。        4.MP3        
6        Congratulations!        祝贺!        5.MP3

我写了批处理把它的序号列出来了,但不知道怎么更改,让它每个加1:
  1. @echo off
  2. set val=1
  3. for /f "skip=1" %%a in (2.txt) do (
  4. if not "%%a"=="un" if not "%%a"=="pa" (
  5. echo %%a
  6. )
  7. )
  8. pause>nul
复制代码

[ 本帖最后由 wunekky 于 2009-7-8 14:32 编辑 ]

回复 1楼 的帖子

看你的代码,好像文本前三行可以忽略,你的列出序号的代码可以改成这样:
  1. @echo off
  2. for /f "skip=3" %%a in (2.txt) do echo %%a
  3. pause>nul
复制代码

[ 本帖最后由 keen 于 2009-7-8 13:25 编辑 ]
(*^_^*)

TOP

回复 1楼 的帖子

你试试这个代码,可以给每个序号加1:
  1. @echo off&setlocal enabledelayedexpansion
  2. (
  3. for /f "skip=3 tokens=1*" %%a in (2.txt) do (
  4.      set /a n=%%a+1
  5.      echo !n! %%b
  6. )
  7. )>1.txt
  8. start "" 1.txt
  9. pause
复制代码
这个代码的效果是把2.txt文件中的内容(忽略前三行),把各自前面的序号加1,写入到1.txt文件中。
(*^_^*)

TOP

回复 3楼 的帖子

其实不是忽略前三行,是如果第一个字符是 un 或者 pa 的话,保留这行不做处理,是我没说清楚,不好意思。
代码有点看不明白:
echo !n! %%b  这一句的作用是显示修改后的一行,还可以理解
>1.txt 这一句不明白了,我只知道>是写文件,那为什么不是for循环的最后一次年循环写入文件,而能够所有for循环的echo写入文件呢?

TOP

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.   if %%a lss a (
  4.     set var=%%a
  5.     set /a n=var+1
  6.     setlocal enabledelayedexpansion
  7.     echo !n! !var:* =!
  8.     endlocal
  9.   ) else echo;%%a
  10. ))>n+.txt
复制代码
--------------

>1.txt 这一句不明白了,我只知道>是写文件,那为什么不是for循环的最后一次年循环写入文件,而能够所有for循环的echo写入文件呢?


例如:
::得到的 _test_.txt 的内容是 for 的最后一次输出:
for %%a in (a b c) do echo %%a>_test_.txt

::得到的 _test_.txt 的内容是 for 的所有输出:
(for %%a in (a b c) do echo %%a)>_test_.txt

[ 本帖最后由 tireless 于 2009-7-8 15:41 编辑 ]

TOP

把整个for语句块当作一个命令,其输出流重定向到文件中
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

似乎无法在源文件上修改吧,不知道不生成新文件能否做到。
Still with wax

TOP

返回列表