Board logo

标题: [文本处理] 批处理怎样根据文件名和行数修改txt文本首行内容? [打印本页]

作者: yonghuairuogu    时间: 2013-11-13 22:07     标题: 批处理怎样根据文件名和行数修改txt文本首行内容?

本帖最后由 pcl_test 于 2016-7-17 14:22 编辑

请教下大家:现在 我有一个文件2-1-7.5.txt,第一行是2-1-7.5,第2-19行为18行的数据,我怎样才能将该文件的第一行变成0  7.5  18?
或者输出到另一个文件b.txt,其中b.txt的第一行为 0  7.5  18,第2-19行为原18行的数据?先谢谢各位兄弟姐妹了!2-1-7.5.txt的文件内容如下:
2-1-7.5
7.20         14.50          -74.48
7.20                14.00         -73.04
7.20                13.50         -67.64
7.20                13.00         -64.33
7.20                12.50         -58.51
7.20                12.00         -55.30
7.20                11.50         -48.94
7.20                11.00         -44.87
7.20                10.50         -44.44
7.20                10.00        -39.98
7.20                9.50                -37.46
7.20                9.00                -36.14
7.20                8.50                -34.49
7.20                8.00                -33.12
7.20                7.50                -31.54
7.20                7.00                -31.01
7.20                6.50                -30.46
7.20                6.00                -30.48
转换后为:
0        7.5          18
7.20         14.50         -74.48
7.20                14.00        -73.04
7.20                13.50        -67.64
7.20                13.00        -64.33
7.20                12.50        -58.51
7.20                12.00        -55.30
7.20                11.50        -48.94
7.20                11.00        -44.87
7.20                10.50        -44.44
7.20                10.00        -39.98
7.20                9.50                -37.46
7.20                9.00                -36.14
7.20                8.50                -34.49
7.20                8.00                -33.12
7.20                7.50                -31.54
7.20                7.00                -31.01
7.20                6.50                -30.46
7.20                6.00                -30.48
作者: foxJL    时间: 2013-11-13 22:19

  1. @echo off
  2. echo,0  7.5  18>b.txt
  3. (for /f "skip=1 delims=" %%i in (2-1-7.5.txt) do (echo,%%i))>>b.txt
  4. pause
复制代码

作者: yonghuairuogu    时间: 2013-11-13 22:34

回复 2# foxJL


    0  7.5  18中的7.5是从txt中的第一行2-1-7.5截取的,假如第一行变成了2-1-9.5,那么我就要输出0  9.5  18;
     还有这个18是txt文件 的行数-1;0是固定的;
  请问该如何得到呢?
作者: terse    时间: 2013-11-13 22:45

本帖最后由 terse 于 2013-11-14 10:29 编辑

难道第一行内容和文件名一致?
  1. @echo off
  2. set /p str=<2-1-7.5.txt"
  3. for /f "tokens=3 delims=-" %%i in ("%str%") do echo 0 %%i 18
  4. more +1 2-1-7.5.txt
复制代码
不定是还有行数吗
  1. @echo off
  2. set /p str=<2-1-7.5.txt"
  3. for /f "tokens=3 delims=-" %%i in ("%str%") do  set str=%%i
  4. ::如文件名和首行一致 可直接下面
  5. ::for /f "tokens=3 delims=-" %%i in ("2-1-7.5.txt") do  set str=%%i
  6. for /f "tokens=*" %%i in ('find /c /v "" < "2-1-7.5.txt"') do  set /a n=%%i-1
  7. (echo 0 %str% %n%&more +1 2-1-7.5.txt)>b.txt
复制代码

作者: foxJL    时间: 2013-11-13 22:50

本帖最后由 foxJL 于 2013-11-13 23:19 编辑
  1. @echo off
  2. set /p s=<2-1-7.5.txt
  3. set s=%s:*-=%
  4. set s=%s:*-=%
  5. for /f "skip=1 delims=" %%i in (2-1-7.5.txt) do (set /a n+=1)
  6. echo,0 %s% %n%>b.txt
  7. more +1 2-1-7.5.txt>>b.txt
复制代码

作者: PowerShell    时间: 2013-11-14 11:32

powershell代码
  1. # 这里按实际目录修改
  2. $源文件 = 'e:\pscode\yonghuairuogu\a.txt'
  3. $目的文件 = 'e:\pscode\yonghuairuogu\b.txt'
  4. $内存中的源文件 =  Get-Content  -LiteralPath $源文件
  5. $第一行第一部分 = "0"
  6. $第一行第二部分 =  (   $内存中的源文件[0] -split "-"   )[-1]
  7. $第一行第三部分 = $内存中的源文件.length - 1
  8. [string]$第一行 = $第一行第一部分  +  '  ' + $第一行第二部分 + '  ' + $第一行第三部分
  9. $第一行 >  $目的文件
  10. $内存中的源文件[1..$内存中的源文件.length]     >>  $目的文件
  11. # 调试通过
复制代码

作者: yonghuairuogu    时间: 2013-11-14 19:09

对呢,我的文件里第一行内容和文件名是一致的。假如我有很多个这样的文件,该如何处理呢?
作者: yonghuairuogu    时间: 2013-11-14 20:06

本帖最后由 yonghuairuogu 于 2013-11-14 20:14 编辑

回复 5# foxJL


   你的程序只能处理一个文件,假如有很多个文件呢,并假设文件名为a.txt,第一行为2-1-7.5,此时的情况呢?
作者: foxJL    时间: 2013-11-14 20:41

回复 8# yonghuairuogu

你的这些文件全在一个文件夹里吗?
作者: yonghuairuogu    时间: 2013-11-14 20:53

本帖最后由 yonghuairuogu 于 2013-11-14 20:55 编辑

回复 9# foxJL


    是的,全在同一个文件夹里

复制两个文件上来,给您看看
2-1-7.5
7.2                         14.5                        -74.48
7.2                         14                          -73.04
7.2                         13.5                        -67.64
7.2                         13                          -64.33
7.2                         12.5                        -58.51
7.2                         12                          -55.3
7.2                         11.5                        -48.94
7.2                         11                          -44.87
7.2                         10.5                        -44.44
7.2                         10                          -39.98
7.2                         9.5                         -37.46
7.2                         9                           -36.14
7.2                         8.5                         -34.49
7.2                         8                           -33.12
7.2                         7.5                         -31.54
7.2                         7                           -31.01
7.2                         6.5                         -30.46
7.2                         6                           -30.48

2-1-7
7.2                         6                           -28.02
7.2                         6.5                         -26.41
7.2                         7                           -26.67
7.2                         7.5                         -27.11
7.2                         8                           -28.52
7.2                         8.5                         -29.6
7.2                         9                           -31.39
7.2                         9.5                         -32.21
7.2                         10                          -35.06
7.2                         10.5                        -38.35
7.2                         11                          -43.48
7.2                         11.5                        -48.08
7.2                         12                          -54.27
7.2                         12.5                        -53.84
7.2                         13                          -54
7.2                         13.5                        -57.29
7.2                         14                          -61.15
作者: foxJL    时间: 2013-11-14 22:49

回复 10# yonghuairuogu

和所有TXT文件放同一个目录
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b *.txt') do (
  3.   set /p s=<%%i
  4.   set s=!s:*-=!
  5.   set s=!s:*-=!
  6.   set "n="
  7.   for /f "skip=1 delims=" %%j in (%%i) do (set /a n+=1)
  8.   echo,0 !s! !n!>new_%%i
  9.   more +1 %%i>>new_%%i
  10. )
复制代码

作者: yonghuairuogu    时间: 2013-11-15 08:30

本帖最后由 foxJL 于 2013-11-15 11:35 编辑

回复 11# foxJL


    非常感谢您的帮助!
我将所有结果都输出到一个文件b.txt中,那么代码就是
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b *.txt') do (
  3.   set /p s=<%%i
  4.   set s=!s:*-=!
  5.   set s=!s:*-=!
  6.   set "n="
  7.   for /f "skip=1 delims=" %%j in (%%i) do (set /a n+=1)
  8.   echo,0 !s! !n!>>b.txt
  9.   more +1 %%i>>b.txt
  10. )
  11. pause
复制代码
如果我想统计该文件夹下的所有txt文件的个数,作为b.txt的第一行,该怎么办呢?
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f %%i in ('dir /s *.txt^|find /i "个文件"') do set num=%%i
  3. echo %num%>b.txt
  4. for /f "delims=" %%i in ('dir /b *.txt') do (
  5.   set /p s=<%%i
  6.   set s=!s:*-=!
  7.   set s=!s:*-=!
  8.   set "n="
  9.   for /f "skip=1 delims=" %%j in (%%i) do (set /a n+=1)
  10.   echo,0 !s! !n!>>b.txt
  11.   more +1 %%i>>b.txt
  12. )
  13. pause
复制代码
我用这个算了下,但是b.txt文件多出来最后一行,有点不对
作者: yonghuairuogu    时间: 2013-11-15 10:06

本帖最后由 foxJL 于 2013-11-15 11:35 编辑

搞定了,我是这样做的:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f %%i in ('dir /s *.txt^|find /i "个文件"') do set num=%%i
  3. for /f "delims=" %%i in ('dir /b *.txt') do (
  4.   set /p s=<%%i
  5.   set s=!s:*-=!
  6.   set s=!s:*-=!
  7.   set "n="
  8.   for /f "skip=1 delims=" %%j in (%%i) do (set /a n+=1)
  9.   echo,0 !s! !n!>>b.txt
  10.   more +1 %%i>>b.txt
  11. )
  12. echo %num%>c.txt
  13. more  b.txt>>c.txt
  14. pause
复制代码

作者: yonghuairuogu    时间: 2013-11-15 10:07

本帖最后由 yonghuairuogu 于 2013-11-15 14:28 编辑

感觉有点麻烦,还要生成中间文件 b.txt




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2