【发布时间】:2020-05-07 18:23:41
【问题描述】:
尝试使用批处理替换 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
这一切看起来都非常复杂——有没有一些更简单的高度自动化的方法可以用最少的学习曲线来做到这一点?感谢您的帮助
【问题讨论】:
-
如果您愿意使用第三方实用程序:jrepl.bat
-
type "%vtextFile%" |jrepl "C:\\" "M:\\" >newFile.txt- jrepl 使用正则表达式,所以 \ 是一个转义字符,它必须被转义(当然是转义字符 \)。或者更优雅一点:jrepl "C:\" "M:\" /f "%vtextFile%" /l /o -,用更改后的测试覆盖文件。
标签: batch-file string-substitution drive-letter