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

[文本处理] 【已结帖】BAT如何批量替换丢失原文件的部分主体内容?

[复制链接]
发表于 2013-9-1 20:57:39 | 显示全部楼层 |阅读模式
本帖最后由 sunson 于 2013-9-4 09:34 编辑

代码如下,批量替换过程中,的确把CHAR1用BWG1替换掉了,但是原文件中的主体部分丢失了,文件大幅减少,不知是什么原因,求解。
示例文件已在附件中。
追加说明:
希望不要借用第三方工具,如SED,因为我这个脚本是提供给别人用的,可能会运行在不通的Windows平台上,有时会遇到SED的兼容问题,而且还要要求安装SED,很不方便,不然我就直接调用Search and Replace了。

最终结论:
经PowerShell版主提示,我进行了测试,在BAT中,ECHO的单行长度≤8185字节,如果超长,该行字符串将无法显示。

附件已无用,故删除。
  1. @ECHO OFF
  2. @ECHO *************************》环境列表定义《***********************
  3. set BWG1=http://10.229.171.51/CNNGateway/any.soap
  4. @ECHO *********************》环境包名及字符串定义《*******************
  5. set CHAR1=REPLACE_THIS_WITH_WEBSERVICE_URL
  6. xcopy *.wsdl test\  /I /Y
  7. cd test
  8. setlocal enabledelayedexpansion
  9. for %%a in (*.wsdl) do (
  10.      (for /f "usebackq delims=" %%b in ("%%a") do  (
  11.           set "str=%%b"
  12.           for %%b in (%CHAR1%-%BWG1%) do (
  13.                for /f "tokens=1,2 delims=-" %%c in ("%%b") do set "str=!str:%%c=%%d!"
  14.           )
  15.           echo !str!
  16.       ))>$
  17. move $ "%%a"
  18. )
  19. cd ..
  20. pause
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2013-9-1 21:28:12 | 显示全部楼层
仔细研究了一下,发现是第5行,即主体部分长度很长的原因。
求教,如何在批量替换过程中,解决这种一行内容超长的问题呢?
发表于 2013-9-2 08:47:00 | 显示全部楼层
  1. sed -i "s#REPLACE_THIS_WITH_WEBSERVICE_URL#http://10.229.171.51/CNNGateway/any.soap#" *.wsdl
复制代码
 楼主| 发表于 2013-9-2 10:01:16 | 显示全部楼层
回复 3# DAIC

能不能不要借用第三方工具,如SED,因为我这个脚本是提供给别人用的,可能会运行在不通的Windows平台上,有时会遇到SED的兼容问题,而且还要要求安装SED,很不方便。
发表于 2013-9-2 11:10:48 | 显示全部楼层
回复 4# sunson


    可以考虑把sed.exe一起打包发过去。BAT处理特殊字符非常不方便。
发表于 2013-9-2 11:30:27 | 显示全部楼层
回复 2# sunson


    你四个for嵌套,里面的%%b有混淆吧?老实说没太明白你的意思。
 楼主| 发表于 2013-9-2 12:43:19 | 显示全部楼层
回复 6# Lumiere
循环嵌套没有问题,不会混淆。
我就是要把所有的wsdl文件里的CHAR1代表的字符串用BWG1代表的字符串代替,但是在最后进行中间文件替换原文件时,由于wsdl文件的第5行比较特殊(需要是用Ultraedit查看不可见字符),长度很长,不能够返回到原文件中,造成主体内容丢失。
所以这个帖子就是,如何解决批量替换过程中原文件单行长度过长的问题。
发表于 2013-9-2 16:44:47 | 显示全部楼层
长度超出 8086 范围 估计也就丢失了
 楼主| 发表于 2013-9-3 08:54:36 | 显示全部楼层
这个长度限制就不能规避么?是echo的限制吗?
发表于 2013-9-3 10:49:20 | 显示全部楼层
本帖最后由 PowerShell 于 2013-9-3 10:50 编辑

powershell中药能解此癌症,愿意用中药么?
愿意的话,你说出程序详细逻辑,最好负伤例子,我帮你写代码。
powershell winxp-sp3可装,win7以上自带.
 楼主| 发表于 2013-9-3 16:16:37 | 显示全部楼层
回复 10# PowerShell

POWERSHELL版主,你是想让我从了吗?
我知道POWERSHELL比BAT强大,不过这样和借用SED是一样的,而且SED也很简单。
难道BAT的先天缺陷,造成了这种超长字符串的问题无法解决吗?
发表于 2013-9-3 16:23:47 | 显示全部楼层
回复 11# sunson


    试试VBS吧,也许可以。
发表于 2013-9-3 20:17:19 | 显示全部楼层
本帖最后由 PowerShell 于 2013-9-3 20:18 编辑

难道BAT的先天缺陷,造成了这种超长字符串的问题无法解决吗----是啊,貌似有8000多个的限制啊,他们研究的都知道细节,这是癌症啊,要想解决,1用第三方程序,存字符串,2用其他脚本工具。
bash bat 作为老一代脚本,有很多缺陷,只不过有时候大家藏着掖着,没人专门研究整理喊出来罢了。

bat vbs powershell 长江后浪推前浪啊。
今天你看猪,太低级,只配被吃。几万年后,人人都是超人。人类太落后,必然被淘汰。

你又何必硬让草履虫长翅膀呢?你就从了老衲吧

评分

参与人数 1技术 +1 收起 理由
sunson + 1 好吧,从了~

查看全部评分

 楼主| 发表于 2013-9-4 09:35:35 | 显示全部楼层
最终结论:
经PowerShell版主提示,我进行了测试,在BAT中,ECHO的单行长度≤8185字节,如果超长,该行字符串将无法显示。
结贴!
发表于 2013-9-4 18:52:04 | 显示全部楼层
回复 14# sunson


微软官方有说明的
http://www.bathome.net/viewthread.php?tid=3403#pid21404
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 14:43 , Processed in 0.026183 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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