找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28923|回复: 5

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

[复制链接]
发表于 2017-3-9 08:29:43 | 显示全部楼层 |阅读模式
  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:01 | 显示全部楼层
回复 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
复制代码
发表于 2017-3-9 10:27:50 | 显示全部楼层
没看到哪里有问题。
二楼代码
  1. for /f "tokens=*" %%i in (Ss.txt) do (
复制代码
用"delims=" 代替 "tokens=*"更稳妥,tokens=*会忽略行首空格。
 楼主| 发表于 2017-3-9 13:14:32 | 显示全部楼层
回复 3# taofan712


    好的,谢谢
发表于 2017-3-9 15:54:11 | 显示全部楼层
批处理脚本如上,替换完成后,换行符没了

你的Ss.txt每行的行尾有个特殊的不可见字符NUL
用记事本打开看起来像是空格,但是用Notepad++或者Ultra Edit之类的编辑器打开可以看到这个特殊字符。
建议找你们的DBA看看导出的时候能否解决这个NUL字符的问题。
发表于 2017-3-9 15:56:01 | 显示全部楼层
回复 3# taofan712


你没有看出来的语法错误
for /f "tokens=*" %%i in ('type Ss.txt') do (
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 09:40 , Processed in 0.018127 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表