Пакетный файл изменяет строку буквы диска в файле журнала - PullRequest
0 голосов
/ 07 мая 2020

пытается заменить обозначение диска в файлах журнала Idrive с помощью пакета. Программист-любитель пытается понять командные файлы в течение многих лет, но до сих пор не владеет передовыми методами. Я подозреваю, что нужно экранировать '\' backsla sh, но ничего, что я пробую, не работает.

Пример ввода журнала:

[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

Это все кажется очень запутанный - есть ли более простой высокоавтоматизированный способ сделать это с минимальной кривой обучения? Спасибо за помощь

1 Ответ

2 голосов
/ 07 мая 2020

Ваш код отлично работает для меня - когда я исправляю только одну строку:

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

\ не нужно экранировать (другой \ все равно будет неправильным. ^) и что более важно: ваша исходная строка устанавливает для первой переменной значение C:\\<SPACE>, поэтому заменять нечего.

Обратите внимание на положение кавычек - они не становятся частью переменной имя или значение, но это рекомендуемый синтаксис, избегающий случайных пробелов и безопасный для некоторых ядовитых символов, таких как <>&|.

...