批处理文件更改日志文件中的驱动器号字符串
Batch file change a drive letter string in a log file
尝试使用批处理替换 Idrive 日志文件中的驱动器名称。业余程序员多年来一直试图理解批处理文件,但仍然没有掌握高级技术。我怀疑“\”反斜杠需要转义,但我尝试的任何方法都不起作用。
示例日志输入:
[C:\Users\rh56\Music\desktop.ini]
[D:\clients\]
[D:\Orion\]
[D:\rigel\]
[SUCCESS] [03/06/2020 5:02:19] [[Full Backup] C:\stuff19-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:\junk19-05-01 20_22_26-Greenshot.png][Size: 384.27 KB]]
[SUCCESS] [03/06/2020 5:02:20] [[Full Backup]C:\arbitrage\EuroYen30day19-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:\stuff19-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:\junk19-05-01 20_22_26-Greenshot.png][Size: 384.27 KB]]
[SUCCESS] [03/06/2020 5:02:20] [[Full Backup][M:\arbitrage\EuroYen30day19-05-01 20_23_06-Window.png][Size: 271.33 KB]]
我的代码:
set vSearch=C:\ & set vReplace=M:\
setlocal enableextensions disabledelayedexpansion
::
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
这一切看起来很复杂——有没有更简单的高度自动化的方法来做到这一点并且学习曲线最小?感谢您的帮助
你的代码对我来说工作正常 - 当我只更正一行时:
set "vSearch=C:\" & set "vReplace=M:\"
\
没有被转义(另一个 \
无论如何都是错误的。转义字符是 ^
)更重要的是:您的原始行设置了第一个变量到 C:\<SPACE>
,所以没有什么可以替换的。
注意引号的位置 - 它们不会成为变量名称或值的一部分,但这是推荐的语法,可以避免杂散空格,并且可以安全地抵御某些有毒字符,例如 <>&|
.
尝试使用批处理替换 Idrive 日志文件中的驱动器名称。业余程序员多年来一直试图理解批处理文件,但仍然没有掌握高级技术。我怀疑“\”反斜杠需要转义,但我尝试的任何方法都不起作用。
示例日志输入:
[C:\Users\rh56\Music\desktop.ini]
[D:\clients\]
[D:\Orion\]
[D:\rigel\]
[SUCCESS] [03/06/2020 5:02:19] [[Full Backup] C:\stuff19-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:\junk19-05-01 20_22_26-Greenshot.png][Size: 384.27 KB]]
[SUCCESS] [03/06/2020 5:02:20] [[Full Backup]C:\arbitrage\EuroYen30day19-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:\stuff19-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:\junk19-05-01 20_22_26-Greenshot.png][Size: 384.27 KB]]
[SUCCESS] [03/06/2020 5:02:20] [[Full Backup][M:\arbitrage\EuroYen30day19-05-01 20_23_06-Window.png][Size: 271.33 KB]]
我的代码:
set vSearch=C:\ & set vReplace=M:\
setlocal enableextensions disabledelayedexpansion
::
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
这一切看起来很复杂——有没有更简单的高度自动化的方法来做到这一点并且学习曲线最小?感谢您的帮助
你的代码对我来说工作正常 - 当我只更正一行时:
set "vSearch=C:\" & set "vReplace=M:\"
\
没有被转义(另一个 \
无论如何都是错误的。转义字符是 ^
)更重要的是:您的原始行设置了第一个变量到 C:\<SPACE>
,所以没有什么可以替换的。
注意引号的位置 - 它们不会成为变量名称或值的一部分,但这是推荐的语法,可以避免杂散空格,并且可以安全地抵御某些有毒字符,例如 <>&|
.