标题: [文本处理] 【已结帖】BAT如何批量替换丢失原文件的部分主体内容? [打印本页]
作者: sunson 时间: 2013-9-1 20:57 标题: 【已结帖】BAT如何批量替换丢失原文件的部分主体内容?
本帖最后由 sunson 于 2013-9-4 09:34 编辑
代码如下,批量替换过程中,的确把CHAR1用BWG1替换掉了,但是原文件中的主体部分丢失了,文件大幅减少,不知是什么原因,求解。
示例文件已在附件中。
追加说明:
希望不要借用第三方工具,如SED,因为我这个脚本是提供给别人用的,可能会运行在不通的Windows平台上,有时会遇到SED的兼容问题,而且还要要求安装SED,很不方便,不然我就直接调用Search and Replace了。
最终结论:
经PowerShell版主提示,我进行了测试,在BAT中,ECHO的单行长度≤8185字节,如果超长,该行字符串将无法显示。
附件已无用,故删除。- @ECHO OFF
- @ECHO *************************》环境列表定义《***********************
- set BWG1=http://10.229.171.51/CNNGateway/any.soap
- @ECHO *********************》环境包名及字符串定义《*******************
- set CHAR1=REPLACE_THIS_WITH_WEBSERVICE_URL
- xcopy *.wsdl test\ /I /Y
- cd test
- setlocal enabledelayedexpansion
- for %%a in (*.wsdl) do (
- (for /f "usebackq delims=" %%b in ("%%a") do (
- set "str=%%b"
- for %%b in (%CHAR1%-%BWG1%) do (
- for /f "tokens=1,2 delims=-" %%c in ("%%b") do set "str=!str:%%c=%%d!"
- )
- echo !str!
- ))>$
- move $ "%%a"
- )
- cd ..
- pause
复制代码
作者: sunson 时间: 2013-9-1 21:28
仔细研究了一下,发现是第5行,即主体部分长度很长的原因。
求教,如何在批量替换过程中,解决这种一行内容超长的问题呢?
作者: DAIC 时间: 2013-9-2 08:47
- sed -i "s#REPLACE_THIS_WITH_WEBSERVICE_URL#http://10.229.171.51/CNNGateway/any.soap#" *.wsdl
复制代码
作者: sunson 时间: 2013-9-2 10:01
回复 3# DAIC
能不能不要借用第三方工具,如SED,因为我这个脚本是提供给别人用的,可能会运行在不通的Windows平台上,有时会遇到SED的兼容问题,而且还要要求安装SED,很不方便。
作者: DAIC 时间: 2013-9-2 11:10
回复 4# sunson
可以考虑把sed.exe一起打包发过去。BAT处理特殊字符非常不方便。
作者: Lumiere 时间: 2013-9-2 11:30
回复 2# sunson
你四个for嵌套,里面的%%b有混淆吧?老实说没太明白你的意思。
作者: sunson 时间: 2013-9-2 12:43
回复 6# Lumiere
循环嵌套没有问题,不会混淆。
我就是要把所有的wsdl文件里的CHAR1代表的字符串用BWG1代表的字符串代替,但是在最后进行中间文件替换原文件时,由于wsdl文件的第5行比较特殊(需要是用Ultraedit查看不可见字符),长度很长,不能够返回到原文件中,造成主体内容丢失。
所以这个帖子就是,如何解决批量替换过程中原文件单行长度过长的问题。
作者: terse 时间: 2013-9-2 16:44
长度超出 8086 范围 估计也就丢失了
作者: sunson 时间: 2013-9-3 08:54
这个长度限制就不能规避么?是echo的限制吗?
作者: PowerShell 时间: 2013-9-3 10:49
本帖最后由 PowerShell 于 2013-9-3 10:50 编辑
powershell中药能解此癌症,愿意用中药么?
愿意的话,你说出程序详细逻辑,最好负伤例子,我帮你写代码。
powershell winxp-sp3可装,win7以上自带.
作者: sunson 时间: 2013-9-3 16:16
回复 10# PowerShell
POWERSHELL版主,你是想让我从了吗?
我知道POWERSHELL比BAT强大,不过这样和借用SED是一样的,而且SED也很简单。
难道BAT的先天缺陷,造成了这种超长字符串的问题无法解决吗?
作者: DAIC 时间: 2013-9-3 16:23
回复 11# sunson
试试VBS吧,也许可以。
作者: PowerShell 时间: 2013-9-3 20:17
本帖最后由 PowerShell 于 2013-9-3 20:18 编辑
难道BAT的先天缺陷,造成了这种超长字符串的问题无法解决吗----是啊,貌似有8000多个的限制啊,他们研究的都知道细节,这是癌症啊,要想解决,1用第三方程序,存字符串,2用其他脚本工具。
bash bat 作为老一代脚本,有很多缺陷,只不过有时候大家藏着掖着,没人专门研究整理喊出来罢了。
bat vbs powershell 长江后浪推前浪啊。
今天你看猪,太低级,只配被吃。几万年后,人人都是超人。人类太落后,必然被淘汰。
你又何必硬让草履虫长翅膀呢?你就从了老衲吧
作者: sunson 时间: 2013-9-4 09:35
最终结论:
经PowerShell版主提示,我进行了测试,在BAT中,ECHO的单行长度≤8185字节,如果超长,该行字符串将无法显示。
结贴!
作者: Batcher 时间: 2013-9-4 18:52
回复 14# sunson
微软官方有说明的
http://www.bathome.net/viewthread.php?tid=3403#pid21404
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |