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

[文本处理] 【已解决】请教批处理字符串替换时,内有特殊符号|怎么办?

本帖最后由 52hz 于 2023-5-24 09:24 编辑

需求:在文本中查找部分字符串,找到后把整行内容赋值给变量!s!,然后用另一个变量!f!将文本中的整行!s!替换掉。
代码的替换功能可以用,但实际执行一直不成功,测试很多次之后发现好像是因为字符串中有|这个特殊符号导致的,把变量中的|删掉后可以正常替换,加上就失效,我不知道我的推论是不是正确的,如果确实是因为这个特殊符号,请教该怎么办?
代码如下:
其中!s!和!f!变量为前段代码运行出来的结果,两个变量中都有特殊符号|
!s!的值举例:
5|A|AAA11111,BBB22222,CCC33333,DDD44444
!f!的值举例:
8|A|AAA55555,BBB666,CCC777777,DDD44444
  1. for /f "delims=" %%i in (%~dp0skus.txt) do (
  2. set str=%%i
  3. call set str=%%str:!s!=!f!%%
  4. echo !str!>>n-skus.txt
  5. )
  6. pause
复制代码
请教:文本的格式固定,所以!s!和!f!必有|,这种情况下该如何解决?

回复 2# hlzj88


    没办法,文档原本格式就是这样,所以新内容替换也要按照这个格式走,否则会有连锁反应导致一连串其它引用这个文档的功能都出问题。

TOP

回复 4# terse


    学到了,谢谢大佬

TOP

回复 3# buyiyang

多谢大佬,完美解决。

TOP

除了call 变量s和f是FOR外面的话这样也行
  1.      set "str=%%i"
  2.      set "str=!str:%s%=%f%!"
复制代码

TOP

加双引号
  1. set "str=%%i"
  2. call set "str=%%str:!s!=!f!%%"
复制代码

TOP

我感觉有难度,建议在前期处理中把|替换为其他无影响的字符,比如#@,这样处理难度小一些。
目的,学习批处理

TOP

返回列表