Найдите список слов в файле, затем найдите эти слова в другом, заменив всю строку на Class=ShipDummy, заменив две строки под ней

Я хотел бы найти список слов из внешнего списка (просто каждое слово в строке), который мы назовем 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

person machiavelli    schedule 22.02.2013    source источник


Ответы (1)


person    schedule
comment
Вау, это было быстро!. Я собираюсь проверить это и отчитаться. - person machiavelli; 23.02.2013
comment
Что, если бы я добавил C:\Uses\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.cfg, а также в C:\Uses\P Ditty\Documents\SH3\data\cfg\Backups_SCR*. clg Нужно ли мне просто указать в скобках полное имя файла рядом с обоими экземплярами .clg в вашем скрипте, и он будет искать оба файла? - person machiavelli; 23.02.2013
comment
кстати я поменял логин - person machiavelli; 23.02.2013
comment
Почти понял. Он меняет один, но потом для остальных пишет ECHO IS OFF - person machiavelli; 23.02.2013