Board logo

标题: [文本处理] 批处理替换文件时,行尾的换行符没了 [打印本页]

作者: 沸羊羊    时间: 2017-3-9 08:29     标题: 批处理替换文件时,行尾的换行符没了

  1. @echo off
  2. cd %~dp0
  3. set file="%cd%\Ss.txt"
  4. set "file=%file:"=%"
  5. for %%i in ("%file%") do set "file=%%~fi"
  6. echo.
  7. set replaced=bbb-T2 ̨
  8. echo.
  9. set all=mmm
  10. cd.>"%file%_tmp.txt"
  11. setlocal enabledelayedexpansion
  12. for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%file%"') do (
  13.     set str=%%j
  14.     if not "!str!"=="" set "str=!str:%replaced%=%all%!"
  15.     >>"%file%_tmp.txt" echo.!str!
  16. )
  17. rem copy "%file%" "%file%_bak.conf" >nul 2>nul
  18. move "%file%_tmp.txt" "%file%"
  19. pause
复制代码
各位,最近遇到一个难题,我将SqlServer2005的表数据,使用bcp导出到一个txt文本,即为附件中的Ss.txt,然后我想替换文本中的字符串,批处理脚本如上,替换完成后,换行符没了,特请教各位,如何在替换的时候,保留换行符?
作者: 沸羊羊    时间: 2017-3-9 08:43

回复 1# 沸羊羊


    还有一个问题,我想在每行末尾追加字符串,但是发现追加没有效果,麻烦帮忙看看代码错在哪?
  1. @echo off
  2. set "strTwo=Network"
  3. for /f "tokens=*" %%i in (Ss.txt) do (
  4. >>ssNew.txt echo %%i%strTwo%
  5. )
  6. pause
复制代码

作者: taofan712    时间: 2017-3-9 10:27

没看到哪里有问题。
二楼代码
  1. for /f "tokens=*" %%i in (Ss.txt) do (
复制代码
用"delims=" 代替 "tokens=*"更稳妥,tokens=*会忽略行首空格。
作者: 沸羊羊    时间: 2017-3-9 13:14

回复 3# taofan712


    好的,谢谢
作者: GNU    时间: 2017-3-9 15:54

批处理脚本如上,替换完成后,换行符没了

你的Ss.txt每行的行尾有个特殊的不可见字符NUL
用记事本打开看起来像是空格,但是用Notepad++或者Ultra Edit之类的编辑器打开可以看到这个特殊字符。
建议找你们的DBA看看导出的时候能否解决这个NUL字符的问题。
作者: GNU    时间: 2017-3-9 15:56

回复 3# taofan712


你没有看出来的语法错误
for /f "tokens=*" %%i in ('type Ss.txt') do (




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