批处理文件在日志文件中更改驱动器号字符串

问题描述 投票:0回答:1

试图使用批处理替换Idrive日志文件中的驱动器名称。业余程序员多年来试图理解批处理文件,但仍然没有先进的技术。我怀疑'\'反斜杠需要转义,但我尝试的任何方法都无效。

样本记录输入:

[C:\Users\rh56\Music\desktop.ini]
[D:\clients\]
[D:\Orion\]
[D:\rigel\]
[SUCCESS] [03/06/2020 5:02:19] [[Full Backup]  C:\stuff\2019-01-14 11_54_14-Cartoon Caption Contest _ The New Yorker.png][Size: 191.03 KB]]
[SUCCESS] [03/06/2020 5:02:19] [[Full Backup][C:\junk\2019-05-01 20_22_26-Greenshot.png][Size: 384.27 KB]]
[SUCCESS] [03/06/2020 5:02:20] [[Full Backup]C:\arbitrage\EuroYen30day\2019-05-01 20_23_06-Window.png][Size: 271.33 KB]]

所需的输出:(注意,将M:\替换为C:\)

[M:\Users\rh56\Music\desktop.ini]
[D:\clients\]
[D:\Orion\]
[D:\rigel\]
[SUCCESS] [03/06/2020 5:02:19] [[Full Backup]  M:\stuff\2019-01-14 11_54_14-Cartoon Caption Contest _ The New Yorker.png][Size: 191.03 KB]]
[SUCCESS] [03/06/2020 5:02:19] [[Full Backup][M:\junk\2019-05-01 20_22_26-Greenshot.png][Size: 384.27 KB]]
[SUCCESS] [03/06/2020 5:02:20] [[Full Backup][M:\arbitrage\EuroYen30day\2019-05-01 20_23_06-Window.png][Size: 271.33 KB]]

我的代码:

  set vSearch=C:\\ & set vReplace=M:\\
  setlocal enableextensions disabledelayedexpansion
  ::https://stackoverflow.com/questions/23075953/batch-script-to-find-and-replace-a-string-in-text-file-without-creating-an-extra/23076141
echo. & echo DEBUG DEBUG DEBUG & pause & echo.
    set "vtextFile=C:\idriveLogChecker\molly.log"
    for /f "delims=" %%i in ('type "%vtextFile%" ^& break ^> "%vtextFile%" ') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        >>"%vtextFile%" echo(!line:%vSearch%=%vReplace%!
        endlocal
    )
echo. & echo DEBUG DEBUG DEBUG & pause & net use & set v & echo on & echo. & cmd /K

这一切似乎很令人费解-是否有一些更简单的高度自动化的方法来以最小的学习难度做到这一点?谢谢您的帮助

batch-file string-substitution drive-letter
1个回答
2
投票

您的代码对我来说很好-当我只纠正一行时:

set "vSearch=C:\" & set "vReplace=M:\"

\不能被转义(无论如何,另一个\都是错误的。转义字符为^),更重要的是:您的原始行将第一个变量设置为C:\\<SPACE>,因此没有任何内容将被替换。

请注意引号的位置-引号不会成为变量名称或值的一部分,但建议使用语法,并且避免使用空格,并且对于某些有毒字符(例如<>&|)是安全的。

© www.soinside.com 2019 - 2024. All rights reserved.