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

[文本处理] 【已解决】批处理替换U盘里配置文件出现问题,请大佬帮忙修改

新人小白,东拼西凑自己写了个代码,这个bat的作用是想替换U盘里一个配置文件里的路径前的盘符,变成U盘的盘符,因为经常更换其他电脑用,所以路径前的盘符是变量,要随U盘的盘符变更,但是出现如下问题,小白已经实在是没招了,请帮忙更改代码,谢谢!

1.原来文档里的旧盘符%OldDisk%(如D)用新查找得到的新盘符%DriveU%(如G)替换后出现这样的情况-----此条本人已经解决
2.因为代码里用了eol=!,导致原文件里的很多!开头的注释被删除,但是不用eol又会造成原文件注释的部分被修改[attach]12640[/attach]------此条待找寻新思路
3.新生成的文件编码变成ANSI,能否让新文件与原文件编码一致
代码如下,希望来论坛厉害的大佬帮忙修改代码
------根据#4楼的提醒,此条已改好
  1. @
  2. echo off&setlocal enabledelayedexpansion
  3. REM 声明采用UTF-8编码
  4. chcp 65001
  5. rem 获取U盘当前盘符
  6. for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "VolumeName='Hervey_Hu'" get DeviceID /value') do (
  7. set DriveU=%%a
  8. )
  9. set strFilePath=%DriveU%\PTC\Creo_PTC_System_Documents\config.pro
  10. if not exist %strFilePath% goto end
  11. rem 读取旧盘符
  12. for /f "tokens=1 delims=\" %%i in ('findstr "\\PTC" "%strFilePath%"') do (
  13. for /f "tokens=2 delims= " %%j in ("%%i") do (
  14. set OldDisk=%%j
  15. )
  16. )
  17. REM 读取config.pro所有内容
  18. for /f "eol=! tokens=*" %%k in (%strFilePath%) do (
  19. REM 设置变量str为每行内容
  20. set str=%%k
  21. REM 如果该行有旧盘符a,则将其改为新盘符A
  22. set "str=!str:%OldDisk%\=%DriveU%\!"
  23. rem 把修改后的全部行存入$
  24. echo !str!>>$
  25. )
  26. rem 替换原文件
  27. move $ %strFilePath%
  28. exit
  29. :end
  30. @echo No file was found~
  31. pause
复制代码

%DriveU%找到新硬盘D和G 所以有DG

TOP

回复 2# smss
不是的,D是原文档里的原始盘符,G是根据卷标查找到目前U盘的盘符,问题不知道是不是出在那条查找原原盘符的代码还是替换的那条代码,但是把%OldDisk%换成固定的字母D,能正常被替换成G,谢谢

TOP

本帖最后由 terse 于 2020-7-2 20:30 编辑

把28行改成这样试试
  1. for %%A in (!OldDisk!) do echo set "str=!str:%%A:\=%DriveU%:\!"
复制代码
对于你给出的文件 编码问题 试下 ”chcp 65001“

TOP

本帖最后由 HerveyHu 于 2020-7-2 21:05 编辑

回复 4# terse
大佬,试了一下,你的代码,在转存临时文件的时候是正常的,但是遍历的速度花时间,另外替换原文件的时候好像会出问题,原文件的内容没有被替换掉,不知道是什么原因,不过我已经找到我代码的问题,是if判断有问题,已经改了

TOP

返回列表