新人小白,东拼西凑自己写了个代码,这个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
复制代码
|