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

[文件操作] 【已解决】批处理如何将一个文本内容修改后写入/输出到源文件/原文件?

本帖最后由 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。然后问题来了,怎样输出到源文件中,并且源文件只能包括执行结果的信息?
这是我写的代码:
  1. @echo off
  2. for /f %%i in (test.txt) do (
  3. echo %%i   15
  4. )>>完成.txt
  5. pause
复制代码

两种办法

1.常规做法:
  1. @echo off
  2. (for /f %%i in (test.txt) do (
  3. echo %%i   15
  4. ))>完成.txt
  5. ren 完成.txt test.txt
  6. pause
复制代码
2.玩技巧:
  1. @echo off
  2. %1 %0 :1 | %0 :2 & exit /b
  3. if %1==:1 (
  4.    for /f %%i in (test.txt) do (
  5. echo %%i   15
  6.    )
  7. ) else if %1==:2 (
  8.    find /v "" >test.txt
  9. )
复制代码
1

评分人数

    • idos: 第二个不懂,需要好好研究.....技术 + 1

TOP

回复 2# CrLf


    第一个会提示有重名文件,不成功。第二个可以,效果很好,但没看懂是什么意思

TOP

回复 3# idos


@echo off
(for /f %%i in (test.txt) do (
        echo %%i   15
))>完成.txt
move /y 完成.txt test.txt
2

评分人数

    • idos: 很厉害技术 + 1
    • CrLf: 感谢指正技术 + 1

TOP

顺便说一句,还有一种办法,这里以输出 type 的结果到源文件为例
  1. type test.txt | sort /+65535 | sort /+65535 /o:test.txt
复制代码
兼容性还可以,不过其实并没什么必要

TOP

本帖最后由 pcl_test 于 2016-9-11 21:57 编辑

路过
  1. powershell -c "(gc 'test.txt'|%%{$_.split()[0]+'    15'})|Out-File 'test.txt'"&pause
复制代码
第三方
  1. sed -i -r "s/\S+$/15/" "test.txt"&pause
复制代码
  1. gawk "{s=s\"\"$1\"    15\n\"}END{printf s>\"test.txt\"}" "test.txt"&pause
复制代码

TOP

友情提示,gawk等某些方案直接修改原文件容易导致数据丢失,尤其是大文件。请务必谨慎使用。
用临时文件过渡一下比较安全。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7# Batcher


    从没遇到过 gawk 丢失数据的情况,处理过 1G+ 的大文件,也没什么问题,可否举个极端的例子?

TOP

回复 6# pcl_test


    不是批处理,但也挺厉害的....

TOP

回复 8# CrLf


    无法是速度慢点,一般极少需要处理大数据文本的,20mb算是无压力的
判定一个人是否为伸手党的标准是取决于他的态度和诚意。

TOP

谢谢各位的耐心解答....如果有别的方法,也可以继续列出来

TOP

返回列表