标题: [文本处理] 【已解决】批处理替换U盘里配置文件出现问题,请大佬帮忙修改 [打印本页]
作者: HerveyHu 时间: 2020-7-2 17:00 标题: 【已解决】批处理替换U盘里配置文件出现问题,请大佬帮忙修改
新人小白,东拼西凑自己写了个代码,这个bat的作用是想替换U盘里一个配置文件里的路径前的盘符,变成U盘的盘符,因为经常更换其他电脑用,所以路径前的盘符是变量,要随U盘的盘符变更,但是出现如下问题,小白已经实在是没招了,请帮忙更改代码,谢谢!
1.原来文档里的旧盘符%OldDisk%(如D)用新查找得到的新盘符%DriveU%(如G)替换后出现这样的情况-----此条本人已经解决
2.因为代码里用了eol=!,导致原文件里的很多!开头的注释被删除,但是不用eol又会造成原文件注释的部分被修改[attach]12640[/attach]------此条待找寻新思路
3.新生成的文件编码变成ANSI,能否让新文件与原文件编码一致
代码如下,希望来论坛厉害的大佬帮忙修改代码------根据#4楼的提醒,此条已改好- @
- echo off&setlocal enabledelayedexpansion
-
- REM 声明采用UTF-8编码
- chcp 65001
-
- rem 获取U盘当前盘符
- for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "VolumeName='Hervey_Hu'" get DeviceID /value') do (
- set DriveU=%%a
- )
-
- set strFilePath=%DriveU%\PTC\Creo_PTC_System_Documents\config.pro
-
- if not exist %strFilePath% goto end
-
- rem 读取旧盘符
- for /f "tokens=1 delims=\" %%i in ('findstr "\\PTC" "%strFilePath%"') do (
- for /f "tokens=2 delims= " %%j in ("%%i") do (
- set OldDisk=%%j
- )
- )
-
- REM 读取config.pro所有内容
- for /f "eol=! tokens=*" %%k in (%strFilePath%) do (
-
- REM 设置变量str为每行内容
- set str=%%k
-
- REM 如果该行有旧盘符a,则将其改为新盘符A
- set "str=!str:%OldDisk%\=%DriveU%\!"
-
- rem 把修改后的全部行存入$
- echo !str!>>$
- )
-
- rem 替换原文件
-
- move $ %strFilePath%
-
- exit
-
- :end
-
- @echo No file was found~
-
- pause
复制代码
作者: smss 时间: 2020-7-2 17:47
%DriveU%找到新硬盘D和G 所以有DG
作者: HerveyHu 时间: 2020-7-2 17:59
回复 2# smss
不是的,D是原文档里的原始盘符,G是根据卷标查找到目前U盘的盘符,问题不知道是不是出在那条查找原原盘符的代码还是替换的那条代码,但是把%OldDisk%换成固定的字母D,能正常被替换成G,谢谢
作者: terse 时间: 2020-7-2 20:26
本帖最后由 terse 于 2020-7-2 20:30 编辑
把28行改成这样试试- for %%A in (!OldDisk!) do echo set "str=!str:%%A:\=%DriveU%:\!"
复制代码
对于你给出的文件 编码问题 试下 ”chcp 65001“
作者: HerveyHu 时间: 2020-7-2 20:53
本帖最后由 HerveyHu 于 2020-7-2 21:05 编辑
回复 4# terse
大佬,试了一下,你的代码,在转存临时文件的时候是正常的,但是遍历的速度花时间,另外替换原文件的时候好像会出问题,原文件的内容没有被替换掉,不知道是什么原因,不过我已经找到我代码的问题,是if判断有问题,已经改了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |