批處理新手入門導讀[視頻教程]批處理基礎視頻教程[視頻教程]VBS基礎視頻教程
[批處理文件精品]批處理版照片整理器[批處理文件精品]純批處理備份&還原驅動在線第三方下載
返回列表 發帖

[文本處理] 【已解決】批處理替換U盤里配置文件出現問題,請大佬幫忙修改

本帖最后由 HerveyHu 于 2020-7-7 01:03 編輯

新人小白,東拼西湊自己寫了個代碼,這個bat的作用是想替換U盤里一個配置文件里的路徑前的盤符,變成U盤的盤符,因為經常更換其他電腦用,所以路徑前的盤符是變量,要隨U盤的盤符變更,但是出現如下問題,小白已經實在是沒招了,請幫忙更改代碼,謝謝!

1.原來文檔里的舊盤符%OldDisk%(如D)用新查找得到的新盤符%DriveU%(如G)替換后出現這樣的情況 -----此條本人已經解決
2.因為代碼里用了eol=!,導致原文件里的很多!開頭的注釋被刪除,但是不用eol又會造成原文件注釋的部分被修改------此條待找尋新思路
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

返回列表
中国体育彩票今日中奖号码