标题: [文件操作] 【已解决】批处理如何将一个文本内容修改后写入/输出到源文件/原文件? [打印本页]
作者: idos 时间: 2016-9-11 18:39 标题: 【已解决】批处理如何将一个文本内容修改后写入/输出到源文件/原文件?
本帖最后由 idos 于 2016-9-13 10:23 编辑
例如:有一个名为test.txt的文本文件,内容如下
2016-1 20
2016-9 30
2016-6 40
2016-8 50
2016-2 60
2016-4 70
2016-1 80
我写一个批处理文件,使最后的两位数都改成15。然后问题来了,怎样输出到源文件中,并且源文件只能包括执行结果的信息?
这是我写的代码:- @echo off
- for /f %%i in (test.txt) do (
- echo %%i 15
-
- )>>完成.txt
- pause
复制代码
作者: CrLf 时间: 2016-9-11 18:56
两种办法
1.常规做法:- @echo off
- (for /f %%i in (test.txt) do (
- echo %%i 15
- ))>完成.txt
- ren 完成.txt test.txt
- pause
复制代码
2.玩技巧:- @echo off
- %1 %0 :1 | %0 :2 & exit /b
- if %1==:1 (
- for /f %%i in (test.txt) do (
- echo %%i 15
- )
- ) else if %1==:2 (
- find /v "" >test.txt
- )
复制代码
作者: idos 时间: 2016-9-11 19:07
回复 2# CrLf
第一个会提示有重名文件,不成功。第二个可以,效果很好,但没看懂是什么意思
作者: GNU 时间: 2016-9-11 19:18
回复 3# idos
@echo off
(for /f %%i in (test.txt) do (
echo %%i 15
))>完成.txt
move /y 完成.txt test.txt
作者: CrLf 时间: 2016-9-11 19:26
顺便说一句,还有一种办法,这里以输出 type 的结果到源文件为例- type test.txt | sort /+65535 | sort /+65535 /o:test.txt
复制代码
兼容性还可以,不过其实并没什么必要
作者: pcl_test 时间: 2016-9-11 21:23
本帖最后由 pcl_test 于 2016-9-11 21:57 编辑
路过- powershell -c "(gc 'test.txt'|%%{$_.split()[0]+' 15'})|Out-File 'test.txt'"&pause
复制代码
第三方- sed -i -r "s/\S+$/15/" "test.txt"&pause
复制代码
- gawk "{s=s\"\"$1\" 15\n\"}END{printf s>\"test.txt\"}" "test.txt"&pause
复制代码
作者: Batcher 时间: 2016-9-11 21:53
友情提示,gawk等某些方案直接修改原文件容易导致数据丢失,尤其是大文件。请务必谨慎使用。
用临时文件过渡一下比较安全。
作者: CrLf 时间: 2016-9-12 04:54
回复 7# Batcher
从没遇到过 gawk 丢失数据的情况,处理过 1G+ 的大文件,也没什么问题,可否举个极端的例子?
作者: idos 时间: 2016-9-12 09:04
回复 6# pcl_test
不是批处理,但也挺厉害的....
作者: wskwfkbdn 时间: 2016-9-12 11:12
回复 8# CrLf
无法是速度慢点,一般极少需要处理大数据文本的,20mb算是无压力的
作者: idos 时间: 2016-9-13 10:23
谢谢各位的耐心解答....如果有别的方法,也可以继续列出来
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |