Board logo

标题: [文本处理] 批处理怎样替换文本文件回车符? [打印本页]

作者: fxby    时间: 2014-11-15 15:12     标题: 批处理怎样替换文本文件回车符?

大家好!我是新手,有个问题,诚恳向各位请教。文件:时间.txt,原内容如下:
01,08:20:21,08:22:26,,
姓名1
02,08:24:21,09:45:34,,
姓名2
..........

希望通过DOS批处理转换为: 
01,08:20:21,08:22:26,姓名1
02,08:24:21,09:45:34,姓名2
..........

哪位高手能帮忙写个DOS批处理,谢谢!!!

作者: neorobin    时间: 2014-11-15 16:26

本帖最后由 neorobin 于 2014-11-15 16:32 编辑
  1. @echo off & chcp 936
  2. setlocal enabledelayedexpansion
  3. >时间_new.txt ( for /f "delims=" %%a in (时间.txt) do echo;%%a | find ":" >nul && (set t=%%a)||(echo;!t:~0,-1!%%a) )
  4. start 时间_new.txt
复制代码

作者: fxby    时间: 2014-11-15 18:14

回复 2# neorobin
  谢谢!不过,没有达到预期的结果。
  复制代码,保存为bat,运行后,原文件未改变,生成的时间_new.txt是个空文件。
作者: neorobin    时间: 2014-11-15 19:03

回复 3# fxby


我在 Win7 和 Win XP 上都测试过, 都能得到需要的结果.

你有没有把BAT文件和要处理的文件放在一个目录.

如果在一个目录还不行, 请把首行的
echo off
改成
echo on
在最后一行下面加一行
pause
把看到的任何错误信息发上来
作者: fxby    时间: 2014-11-15 21:02

回复 4# neorobin


    仍然不行
作者: neorobin    时间: 2014-11-15 21:13

回复 5# fxby


是你复制代码的问题, 2 楼的代码一共只有 4 行, 而你把第 3  行代码给切分了

用代码框下面的  "复制代码" 的链接即可将代码复制到剪贴板, 然后在文本编辑器中粘贴.

无论何种复制方式, 你都要保持代码的原始逻辑结构!
作者: CrLf    时间: 2014-11-15 21:27

txt 是什么编码格式?估计楼主的文件是 utf-8 或 unicode
作者: neorobin    时间: 2014-11-15 21:47

本帖最后由 neorobin 于 2014-11-15 21:52 编辑

回复 7# CrLf

是 ANSI 格式, 是他把第 3 行代码错误切成了两行造成的
作者: fxby    时间: 2014-11-16 10:10

回复 8# neorobin
  我是新手,给大家添麻烦了。改了,还是不行。原来就是复制下来,因为不行,才加换行。现在直接点复制,运行结果:

同时,打开了新文件,是空的。
作者: fxby    时间: 2014-11-16 10:18

回复 8# neorobin
  能不能用VB编程?把
01,08:20:21,08:22:26,,
姓名1
  替换成:
01,08:20:21,08:22:26,姓名1

再将时间.txt,改名为 时间.csv,并复制到C:\。如果C:\ 时间.csv已存在,再次复制时,直接覆盖,不提示。全部在后台运行。
作者: ads350668398    时间: 2014-11-16 10:22

要不我 试试[元文件发上来]
作者: fxby    时间: 2014-11-16 10:50

回复 11# ads350668398


最好能用VB写。替换后将时间.txt,改名为 时间.csv,并复制到C:\。如果C:\ 时间.csv已存在,再次复制时,直接覆盖,不提示。全部在后台运行。
作者: neorobin    时间: 2014-11-16 11:10

回复 9# fxby

你不懂当前目录的概念

你启动了命令行, 当前目录是
C:\Users\hh
然后键入了批处理的全路径, 启动了批处理, 你的数据文件不在当前目录, 当然会出现
"系统找不到文件 时间.txt。"

以下三种方式,  任选其一,  你再看看:
A.
保证数据文件和批处理文件在同一个目录, 直接双击批处理文件运行.

B.
你想在命令行键入批处理路径运行, 代码就这样(同样要保证数据文件和批处理文件在同一个目录)
  1. @echo off & chcp 936
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. >时间_new.txt ( for /f "delims=" %%a in (时间.txt) do echo;%%a | find ":" >nul && (set t=%%a)||(echo;!t:~0,-1!%%a) )
  5. start 时间_new.txt
复制代码
C.
把代码中数据文件的相对路径改成绝对路径, 假如你的数据文件全路径为(假设路径中没有任何空格):
C:\Users\hh\Desktop\时间.txt
那么用这个代码:
  1. @echo off & chcp 936
  2. setlocal enabledelayedexpansion
  3. >时间_new.txt ( for /f "delims=" %%a in (C:\Users\hh\Desktop\时间.txt) do echo;%%a | find ":" >nul && (set t=%%a)||(echo;!t:~0,-1!%%a) )
  4. start 时间_new.txt
复制代码
如果数据文件全路径包含空格, 代码得变成另外的样子, 就不说了.
作者: neorobin    时间: 2014-11-16 11:18

回复 10# fxby

你的要求并不复杂, 批处理完全可以解决, 而且批处理保存及修改都非常方便.
但最大的问题是你连操作系统的一些最基本的概念都没有掌握, 即使 别人为你提供了工具, 你却怎么用都不会.
作者: neorobin    时间: 2014-11-16 11:34

回复 10# fxby

仅针对你在此楼提出的要求
  1. @echo off & chcp 936 & setlocal enabledelayedexpansion
  2. del /f /q "C:\时间.csv"
  3. >"C:\时间.csv" ( for /f "useback delims=" %%a in ("C:\Users\hh\Desktop\时间.txt") do echo;%%a | find ":" >nul && (set t=%%a)||(echo;!t:~0,-1!%%a) )
复制代码

作者: fxby    时间: 2014-11-16 11:35

回复 14# neorobin
  在DOS时代,我是折腾过批处理之类的事,觉得不深,时间长了忘了,替换回车符无从下手。
  谢谢你的耐心和指点!你刚才发的我在XP和WIN7上都试过,还有问题,运行后弹出窗口,如下:
   

作者: neorobin    时间: 2014-11-16 11:39

本帖最后由 neorobin 于 2014-11-16 11:41 编辑

回复 16# fxby

我是以你的原文件内容如下来处理的
  1. 01,08:20:21,08:22:26,,
  2. 姓名1
  3. 02,08:24:21,09:45:34,,
  4. 姓名2
  5. 03,09:26:43,09:55:01,,
  6. 姓名3
  7. 04,09:44:33,09:56:55,,
  8. 姓名4
复制代码
难道 这些:
"原文件内容:"
"替换成:"
都是你原文件的内容吗???
作者: fxby    时间: 2014-11-16 15:47

回复 15# neorobin
  非常感谢!!!
  我以前简单地学过DOS和数据库,现业余爱好做些平面和多媒体。近段时间琢磨一个小软件,纯粹是从零开始。软件已经基本能用,想再完善一下。
  我把以上内容再学习、消化一下。谢谢!
作者: fxby    时间: 2014-11-17 18:40

回复 17# neorobin
  可能是我没说清楚。原文件内容为:
01,2014-11-15,20:39:22,,
20:39:23
替换后文件内容应为:
01,2014-11-15,20:39:22,20:39:23
两者之间的差别就是把原文件任意一行后面的 “,+回车符”替换为“,”,而原文件内的其它内容不变。
   

作者: CrLf    时间: 2014-11-17 21:12

纯批:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=0123456789 eol=," %%a in (时间.txt) do (
  4.    set /p "a=" & set /p "b="
  5.    echo !a:,,=,!!b!
  6. ))<时间.txt >时间_new.txt
  7. start 时间_new.txt
复制代码
正则:
  1. @set @bathome=1;/*&echo off
  2. cscript -nologo -e:jscript %0 <时间.txt >时间_new.txt
  3. start 时间_new.txt
  4. pause & exit /b */
  5. var text = WScript.StdIn.ReadAll()
  6. WScript.Echo(text.replace(/,\r?\n/g,''))
复制代码

作者: fxby    时间: 2014-11-18 18:37

回复 20# CrLf

     谢谢!

作者: ads350668398    时间: 2014-11-18 20:42

回复 12# fxby

什么 vb啊 晕 不会啊算了 我还是想想自己的问题吧
作者: DAIC    时间: 2014-11-18 22:06

回复 22# ads350668398


不会就看教程:
http://bbs.bathome.net/thread-13347-1-1.html
作者: samchang2006    时间: 2019-5-17 09:27

回复 20# CrLf


    参考下,正巧遇到这问题。




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