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

[文本处理] 批处理替换文件时,行尾的换行符没了

  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,然后我想替换文本中的字符串,批处理脚本如上,替换完成后,换行符没了,特请教各位,如何在替换的时候,保留换行符?

回复 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
复制代码

TOP

没看到哪里有问题。
二楼代码
  1. for /f "tokens=*" %%i in (Ss.txt) do (
复制代码
用"delims=" 代替 "tokens=*"更稳妥,tokens=*会忽略行首空格。

TOP

回复 3# taofan712


    好的,谢谢

TOP

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

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

TOP

回复 3# taofan712


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

TOP

返回列表