Я хотел бы найти список слов из внешнего списка (просто каждое слово в строке), который мы назовем List.txt, и найти их в файле (C:\Users\P Ditty\Documents\ SH3\data\cfg\Backups_SCR*.clg) (соответствует всему слову, даже если оно находится внутри другого, и соответствует регистру), затем, если они есть, найти эти слова в другом файле(Campaign_SCR.mis .tmp) (соответствует всему слову, даже если оно находится внутри другого, совпадающего регистра) замена всей строки в (Campaign_SCR.mis.tmp) на Name=ShipDummy, ТОЛЬКО если строка начинается с Name=. После этого две строки ниже в том же файле будут заменены на 2-ю строку Class=ShipDummy, а затем на 3-ю строку Type=206.
Вот код, который у меня есть сейчас. Теперь он ищет ClassName=Variable в C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.clg, затем заменяет всю строку на Class=ShipDummy, если находит переменная в Campaign_SCR.mis.tmp. Он также заменяет 1 строку ниже на Type=206.
setlocal enableDelayedExpansion
>Campaign_SCR.mis.tmp (
for /f "tokens=1* delims=:" %%A in ('findstr /n "^" Campaign_SCR.mis.backup') do (
( echo !ln!| findstr "^Type=12$" >NUL && set ln=ln ) || (
set "ln=%%B"
if "!ln:~0,6!"=="Class=" (
findstr /s /c:"ClassName=!ln:~6!" "C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR\*.clg" >"C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR\null" && (
echo Class=ShipDummy
set "ln=Type=12"
)
)
if #!ln!==# (echo;) else echo !ln!
)
)
)
НО я бы хотел, чтобы он искал имя из списка, который я указал, поиск в (C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.clg). Затем, если он найдет совпадение, выполните поиск в Campaign_SCR.mis.tmp и замените всю строку, только если эта строка начинается с Name=, с Name=ShipDummy. Две строки ниже будут заменены на 2-ю строку Class=ShipDummy, затем 3-ю строку Type=206:
Name=ShipDummy
Class=ShipDummy
Type=206
** Имейте в виду, что в Campaign_SCR.mis.tmp строка переменной не часто отображается как Name=variable. Вероятно, это будет Name=(words)variable(words)
Может ли искомый список быть внешним? Можем ли мы заставить его искать одно слово в строке. Например: если список выглядит следующим образом:
Бисмарк Гуд Отпор
Он будет искать каждое слово.**
Если слова из списка совпадают с (C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.clg), убедитесь, что это также соответствует регистру. Таким образом, Bismarck из списка найдет Bismarck из (C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.clg), а не bismarck
Спасибо за уделенное время!
Кстати, это может быть более простым решением проблемы, с которой я здесь столкнулся: Как мне это применить ?
Например:
Скажем, у меня есть внешний список (назовем его, например, List.txt), который выглядит так:
Bismarck
Hood
Repulse
Я буду искать C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.clg для этого. Скажем, он находит Бисмарка и Худа в этом:
sadfasfasfdBismarckfasdfasdfasdfas
asdfasfdafHoodasdfasfas
Затем он будет искать Campaign_SCR.mis.tmp для Bismarck и Hood, заменяя:
Name=asdfBismarckasfdw
Class=jlkjf
Type=12
С участием:
Name=ShipDummy
Class=ShipDummy
Type=206
А также
Name=asdfHoodasfdw
Class=jlkjf
Type=13
С участием:
Name=ShipDummy
Class=ShipDummy
Type=206