标题: [文本处理] [已解决]批处理怎样不改变原编码将两个字符串之间的内容替换为另一个文本中的内容? [打印本页]
作者: 394256623 时间: 2016-11-22 16:54 标题: [已解决]批处理怎样不改变原编码将两个字符串之间的内容替换为另一个文本中的内容?
我有2个文本 1.ini(文本为unidoce编码) 2.ini(文本为unidoce编码)
现在想把1.ini文件中的: [修改器集] 到 CurrentModSet=1 之间的内容替换为 2.ini的内容,直接在1.ini文件上面替换,完成后1.ini同样为 (unidoce编码) 。 下面是文件参考 ([修改器集] 到CurrentModSet=1 之间内容行数不一定,所在的行也不一定,唯一能参考就是 [修改器集] 到CurrentModSet=1 和 修改器集名称 和ModSetEntry 是其他地方不会出现的)因为这个是软件的配置文件,必须为 unidoce编码才能识别。
作者: pcl_test 时间: 2016-11-22 17:35
LZ先说说unidoce是什么编码
作者: pcl_test 时间: 2016-11-22 17:43
- powershell -c "[IO.File]::ReadAllText('1.ini', [Text.Encoding]::Unicode) -replace '\[修改器集][\s\S]+?CurrentModSet=1',[IO.File]::ReadAllText('2.ini', [Text.Encoding]::Unicode).trim()"
- pause
复制代码
作者: 394256623 时间: 2016-11-22 17:49
回复 2# pcl_test
不好意思,表面写错了,是unicode,最好是bat批处理。
作者: 394256623 时间: 2016-11-22 17:50
回复 3# pcl_test
能不能用批处理,win7没有sell这个命令,并且我还需要结合做其他批处理。
作者: pcl_test 时间: 2016-11-22 18:00
- mshta http://bathome.net/s/hta/index.html "iconv.saveText(type('1.ini').replace(/\[修改器集][\s\S]+?CurrentModSet=1/,type('2.ini').replace(/\s*$/,'')),'result.txt','UTF-16le')"
- pause
复制代码
作者: 394256623 时间: 2016-11-22 20:26
回复 6# pcl_test
版主大人,谢谢你帮我写代码,我在电脑运行的时候,会显示 iconv.saveText 不是内部处理命令,也不是运行程序。这个要怎么弄,太麻烦你了。
作者: pcl_test 时间: 2016-11-22 20:48
回复 7# 394256623
6楼代码复制粘贴保存为bat文件,跟1.ini和2.ini放一起运行
作者: 394256623 时间: 2016-11-22 23:01
回复 8# pcl_test
保存为bat后运行的就是这样提示的,1.ini 和2.ini都是同一个目录,是不是需要第三方插件,我是win系统
作者: pcl_test 时间: 2016-11-22 23:24
回复 9# 394256623
win7/8/10用3楼代码呀
作者: 394256623 时间: 2016-11-23 09:35
回复 10# pcl_test
使用3楼的代码,在BAT窗口看到是正常的显示,不过文字并没有输入到需要改变的1.ini里面。麻烦版主再帮忙改一下。谢谢了。
作者: pcl_test 时间: 2016-11-23 10:13
回复 11# 394256623
自行搜索和学习如何输出/写入内容到指定文本的知识和方法
作者: 394256623 时间: 2016-11-23 14:15
本帖最后由 394256623 于 2016-11-23 14:17 编辑
回复 12# pcl_test
我在代码后面添加 >>3.INI后,生成的文件还是 ansi编码,不是UNICODE编码。 这样的话就不是在原文件修改了,是生成新文件了。麻烦版主大大帮忙写个完整,就在 1.ini文件基础上面修改,不改变编码和名称。
非常感谢了。。。。
作者: pcl_test 时间: 2016-11-23 14:23
回复 13# 394256623
你在代码哪里加的>>3.ini?把你代码发出来看看
作者: 394256623 时间: 2016-11-23 14:42
本帖最后由 394256623 于 2016-11-23 14:54 编辑
回复 14# pcl_test
我是这样加的代码,这样会生成3.ini(不过是ANSI编码)
powershell -c "[IO.File]::ReadAllText('1.ini', [Text.Encoding]::Unicode) -replace '\[修改器集][\s\S]+?CurrentModSet=1',[IO.File]::ReadAllText('2.ini', [Text.Encoding]::Unicode).trim()" >>3.ini
你写的这下面那串代码在win10上面可以运行,不知道怎么的在家里就无法运行,家里运行会打开 http://bathome.net/s/hta/index.html 这个网址,办公室运行就不会打开网址,并且运行还会生成 result.txt 这个最终文件,这个文件编码就是正确的。 如果去掉mshta http://bathome.net/s/hta/index.html 和后面的引号,就会显示 iconv.saveText不是可执行程序。(这个方式需要能能接到你们网站才行,估计是我们这边有些网络不支持访问,或者访问很慢导致的情况)
mshta http://bathome.net/s/hta/index.html "iconv.saveText(type('1.ini').replace(/\[修改器集][\s\S]+?CurrentModSet=1/,type('2.ini').replace(/\s*$/,'')),'1.ini','UTF-16le')"
作者: pcl_test 时间: 2016-11-23 14:53
……trim()>3.ini" 加里面
作者: 394256623 时间: 2016-11-23 16:04
本帖最后由 394256623 于 2016-11-24 00:04 编辑
回复 16# pcl_test
1.能不能直接改 1.ini,不用生成 3.ini(我将后面 >3.ini改为1.ini会无法生成文件),就是也不用新建一个文件一个*.ini 后,再去删除1.ini ,再将新生成的文件改为 1.ini,就差这点就快完美了。。。
作者: pcl_test 时间: 2016-11-23 20:22
回复 17# 394256623
……trim()|out-file '1.ini'"
作者: 394256623 时间: 2016-11-24 00:08
回复 18# pcl_test
每使用一次命令,1.ini (最终文件)末尾就会多一行空白行,使用命令如下。
1. powershell -c "[IO.File]::ReadAllText('C:\Users\ww-zj\AppData\Local\Autodesk\3dsMaxDesign\2014 - 64bit\CHS\3dsmax.ini', [Text.Encoding]::Unicode) -replace '\[修改器集][\s\S]+?CurrentModSet=1',[IO.File]::ReadAllText('快捷操作.ini', [Text.Encoding]::Unicode).trim()|out-file 'C:\Users\ww-zj\AppData\Local\Autodesk\3dsMaxDesign\2014 - 64bit\CHS\3dsmax.ini'"
如下图所示:
2. powershell 把 2.ini 插入到1.ini文件中的末尾同样会在前面多一行空白行,使用命令如下。
powershell -c "[IO.File]::ReadAllText('%HOMEPATH%\AppData\Local\Autodesk\3dsMaxDesign\2014 - 64bit\CHS\3dsmax.ini', [Text.Encoding]::Unicode) ,[IO.File]::ReadAllText('快捷操作.ini', [Text.Encoding]::Unicode).trim()|out-file '%HOMEPATH%\AppData\Local\Autodesk\3dsMaxDesign\2014 - 64bit\CHS\3dsmax.ini'"
如下图所示:
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |