标题: [文本处理] 批处理替换文件时,行尾的换行符没了 [打印本页]
作者: 沸羊羊 时间: 2017-3-9 08:29 标题: 批处理替换文件时,行尾的换行符没了
- @echo off
- cd %~dp0
-
- set file="%cd%\Ss.txt"
-
- set "file=%file:"=%"
- for %%i in ("%file%") do set "file=%%~fi"
- echo.
- set replaced=bbb-T2 ̨
- echo.
- set all=mmm
-
- cd.>"%file%_tmp.txt"
- setlocal enabledelayedexpansion
- for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%file%"') do (
- set str=%%j
- if not "!str!"=="" set "str=!str:%replaced%=%all%!"
- >>"%file%_tmp.txt" echo.!str!
- )
- rem copy "%file%" "%file%_bak.conf" >nul 2>nul
- move "%file%_tmp.txt" "%file%"
- pause
复制代码
各位,最近遇到一个难题,我将SqlServer2005的表数据,使用bcp导出到一个txt文本,即为附件中的Ss.txt,然后我想替换文本中的字符串,批处理脚本如上,替换完成后,换行符没了,特请教各位,如何在替换的时候,保留换行符?
作者: 沸羊羊 时间: 2017-3-9 08:43
回复 1# 沸羊羊
还有一个问题,我想在每行末尾追加字符串,但是发现追加没有效果,麻烦帮忙看看代码错在哪?- @echo off
- set "strTwo=Network"
- for /f "tokens=*" %%i in (Ss.txt) do (
- >>ssNew.txt echo %%i%strTwo%
- )
- pause
复制代码
作者: taofan712 时间: 2017-3-9 10:27
没看到哪里有问题。
二楼代码- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |