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

[文本处理] 批处理怎样根据文件名和行数修改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

  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
复制代码

TOP

回复 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是固定的;
  请问该如何得到呢?

TOP

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

TOP

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

TOP

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. # 调试通过
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

对呢,我的文件里第一行内容和文件名是一致的。假如我有很多个这样的文件,该如何处理呢?

TOP

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

回复 5# foxJL


   你的程序只能处理一个文件,假如有很多个文件呢,并假设文件名为a.txt,第一行为2-1-7.5,此时的情况呢?

TOP

回复 8# yonghuairuogu

你的这些文件全在一个文件夹里吗?

TOP

本帖最后由 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

TOP

回复 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. )
复制代码
1

评分人数

TOP

本帖最后由 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文件多出来最后一行,有点不对

TOP

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

TOP

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

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

TOP

返回列表