标题: [文本处理] 批处理怎样根据文件名和行数修改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
- @echo off
- echo,0 7.5 18>b.txt
- (for /f "skip=1 delims=" %%i in (2-1-7.5.txt) do (echo,%%i))>>b.txt
- 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 编辑
难道第一行内容和文件名一致?- @echo off
- set /p str=<2-1-7.5.txt"
- for /f "tokens=3 delims=-" %%i in ("%str%") do echo 0 %%i 18
- more +1 2-1-7.5.txt
复制代码
不定是还有行数吗- @echo off
- set /p str=<2-1-7.5.txt"
- for /f "tokens=3 delims=-" %%i in ("%str%") do set str=%%i
- ::如文件名和首行一致 可直接下面
- ::for /f "tokens=3 delims=-" %%i in ("2-1-7.5.txt") do set str=%%i
- for /f "tokens=*" %%i in ('find /c /v "" < "2-1-7.5.txt"') do set /a n=%%i-1
- (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 编辑
- @echo off
- set /p s=<2-1-7.5.txt
- set s=%s:*-=%
- set s=%s:*-=%
- for /f "skip=1 delims=" %%i in (2-1-7.5.txt) do (set /a n+=1)
- echo,0 %s% %n%>b.txt
- more +1 2-1-7.5.txt>>b.txt
复制代码
作者: PowerShell 时间: 2013-11-14 11:32
powershell代码- # 这里按实际目录修改
- $源文件 = 'e:\pscode\yonghuairuogu\a.txt'
- $目的文件 = 'e:\pscode\yonghuairuogu\b.txt'
-
- $内存中的源文件 = Get-Content -LiteralPath $源文件
- $第一行第一部分 = "0"
- $第一行第二部分 = ( $内存中的源文件[0] -split "-" )[-1]
- $第一行第三部分 = $内存中的源文件.length - 1
- [string]$第一行 = $第一行第一部分 + ' ' + $第一行第二部分 + ' ' + $第一行第三部分
-
- $第一行 > $目的文件
- $内存中的源文件[1..$内存中的源文件.length] >> $目的文件
- # 调试通过
复制代码
作者: 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文件放同一个目录- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b *.txt') do (
- set /p s=<%%i
- set s=!s:*-=!
- set s=!s:*-=!
- set "n="
- for /f "skip=1 delims=" %%j in (%%i) do (set /a n+=1)
- echo,0 !s! !n!>new_%%i
- more +1 %%i>>new_%%i
- )
复制代码
作者: yonghuairuogu 时间: 2013-11-15 08:30
本帖最后由 foxJL 于 2013-11-15 11:35 编辑
回复 11# foxJL
非常感谢您的帮助!
我将所有结果都输出到一个文件b.txt中,那么代码就是- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b *.txt') do (
- set /p s=<%%i
- set s=!s:*-=!
- set s=!s:*-=!
- set "n="
- for /f "skip=1 delims=" %%j in (%%i) do (set /a n+=1)
- echo,0 !s! !n!>>b.txt
- more +1 %%i>>b.txt
- )
- pause
复制代码
如果我想统计该文件夹下的所有txt文件的个数,作为b.txt的第一行,该怎么办呢?- @echo off & setlocal enabledelayedexpansion
- for /f %%i in ('dir /s *.txt^|find /i "个文件"') do set num=%%i
- echo %num%>b.txt
- for /f "delims=" %%i in ('dir /b *.txt') do (
- set /p s=<%%i
- set s=!s:*-=!
- set s=!s:*-=!
- set "n="
- for /f "skip=1 delims=" %%j in (%%i) do (set /a n+=1)
- echo,0 !s! !n!>>b.txt
- more +1 %%i>>b.txt
- )
- pause
复制代码
我用这个算了下,但是b.txt文件多出来最后一行,有点不对
作者: yonghuairuogu 时间: 2013-11-15 10:06
本帖最后由 foxJL 于 2013-11-15 11:35 编辑
搞定了,我是这样做的:- @echo off & setlocal enabledelayedexpansion
- for /f %%i in ('dir /s *.txt^|find /i "个文件"') do set num=%%i
- for /f "delims=" %%i in ('dir /b *.txt') do (
- set /p s=<%%i
- set s=!s:*-=!
- set s=!s:*-=!
- set "n="
- for /f "skip=1 delims=" %%j in (%%i) do (set /a n+=1)
- echo,0 !s! !n!>>b.txt
- more +1 %%i>>b.txt
- )
- echo %num%>c.txt
- more b.txt>>c.txt
- pause
复制代码
作者: yonghuairuogu 时间: 2013-11-15 10:07
本帖最后由 yonghuairuogu 于 2013-11-15 14:28 编辑
感觉有点麻烦,还要生成中间文件 b.txt
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |