搜索文件中的单词列表,然后在另一个文件中找到这些单词,将整行替换为 Class=ShipDummy,替换其下面的 2 行

2023-12-20

我想从外部列表(简单地一行中的每个单词)中搜索单词列表,我们将其称为“List.txt”,并在文件中搜索它们(C:\ Users \ P Ditty \文件\SH3\data\cfg\Backups_SCR*.clg)(匹配整个单词,即使它在另一个单词中,并且匹配大小写),然后如果它们在那里,请在另一个文件上找到这些词(Campaign_SCR.mis.tmp)(匹配整个单词,即使它在另一个单词中,匹配大小写)仅当该行以“Name=”开头时,才将 (Campaign_SCR.mis.tmp) 中的整行替换为 Name=ShipDummy。之后,同一文件中下面的两行将替换为第二行“Class=ShipDummy”,然后替换为第三行“Type=206”。

这是我现在的代码。现在它搜索 ClassName=Variable在 C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.clg 中,如果在 Campaign_SCR.mis.tmp 中找到该变量,则它会将整行替换为 Class=ShipDummy。它还将下面的 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。下面的两行将替换为第二行“Class=ShipDummy”,然后替换为第三行“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) 匹配时,请确保它也匹配大小写。因此,列表中的“俾斯麦”将从 (C:\Users\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.clg) 中找到“俾斯麦”,而不是找到“俾斯麦”

感谢您的时间!

顺便说一句,这可能是解决我遇到的问题的更简单的方法:我该如何应用这个? https://stackoverflow.com/questions/15017118/how-do-i-apply-this

例如:

假设我有一个外部列表(例如,将其称为 List.txt),如下所示:

Bismarck
Hood
Repulse

我将搜索 C:\Users\P Diddy\Documents\SH3\data\cfg\Backups_SCR*.college 。假设它在其中找到“Bismarck”和“Hood”:

sadfasfasfdBismarckfasdfasdfasdfas

asdfasfdafHoodasdfasfas

然后它将搜索 Campaign_SCR.mis.tmp 中的 Bismarck 和 Hood 替换:

Name=asdfBismarckasfdw
Class=jlkjf
Type=12

With:

Name=ShipDummy
Class=ShipDummy
Type=206

And

Name=asdfHoodasfdw
Class=jlkjf
Type=13

With:

Name=ShipDummy
Class=ShipDummy
Type=206

@echo off
setlocal EnableDelayedExpansion

REM INITIALIZE THE LIST OF WORDS THAT WILL BE SEARCHED
set targetWords=:EOF

rem I'd like to search for a list of words from an external list (simple each word on a line)
for /F %%a in (List.txt) do (   
   rem and search for them in a file (C:\Uses\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.clg) 
   findstr "%%a" "C:\Uses\P Ditty\Documents\SH3\data\cfg\Backups_SCR*.clg" > NUL
   rem if they are there...
   if !errorlevel! equ 0 (
      REM INSERT THE WORD IN THE TARGET LIST
      set targetWords=!targetWords! %%a
   )
)

REM INSERT THE END-OF-FILE MARK IN THE FILE
echo :EOF>> Campaign_SCR.mis.tmp

REM INITIALIZE THE NUMBER OF LAST PROCESSED LINE IN REDIRECTED Campaign_SCR.mis.tmp
set lastLine=0

rem ... find those words on another file(Campaign_SCR.mis.tmp)
< Campaign_SCR.mis.tmp (for /F "delims=:" %%a in ('findstr /N "%targetWords%" Campaign_SCR.mis.tmp') do (
   REM DUPLICATE PREVIOUS LINES UNTIL NEW TARGET LINE
   set /A numOfLines=%%a-lastLine-1
   for /L %%i in (1,1,!numOfLines!) do (
      set line=
      set /P line=
      echo(!line!
   )
   rem if the line starts with "Name="
   set /P line=
   if "!line:~0,5!" equ "Name=" (
      rem replacing the whole line...with Name=ShipDummy
      echo Name=ShipDummy
      rem After that the two lines below that in that same file would be replaced with 2nd line "Class=ShipDummy", 
      set /P line=
      echo Class=ShipDummy
      rem then 3rd line "Type=206".
      set /P line=
      echo Type=206
      set /A lastLine=%%i+2
   ) else (
      REM DUPLICATE THE NON MATCHING LINE, IF IS NOT THE :EOF MARK
      if "!line!" neq ":EOF" (
         echo !line!
         set lastLine=%%i
      )
   )
)) > Campaign_SCR.mis.tmp.NEW

REM UPDATE THE NEW FILE
REM del Campaign_SCR.mis.tmp
REM ren Campaign_SCR.mis.tmp.NEW Campaign_SCR.mis.tmp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搜索文件中的单词列表,然后在另一个文件中找到这些单词,将整行替换为 Class=ShipDummy,替换其下面的 2 行 的相关文章

  • Windows批处理文件:在for循环中设置变量

    我有许多具有相同命名方案的文件 作为示例 四个文件分别称为 num 001 001 txt num 002 001 txt num 002 002 txt num 002 003 txt 第一组数字代表它来自哪个 包 第二组数字只是用来区分
  • 批处理文件中的 %* 是什么意思?

    我见过的用法 在批处理文件和命令行中 有人可以解释一下的典型用法吗 有一个例子吗 它的意思是 命令行中的所有参数 例如 当您想要将命令行从批处理文件转发到另一个程序时 它非常有用 REM mybatchfile cmd echo You c
  • Windows 批处理文件中的 SQL 语句

    有没有办法让Windows批处理文件直接输入SQL语句而不需要调用脚本 我希望批处理文件登录SQL 然后直接输入语句 EDIT 我正在使用 Oracle v10g 对于单个命令 您可以使用以下技巧 echo select from dual
  • 使用javascript批量上传请求到Google Cloud Storage

    我正在尝试使用 javascript 在批量请求中将多个图像上传到谷歌云存储 我在用着https developers google com storage docs json api v1 how tos batch example ht
  • 双击时将文件名传递给 Windows 批处理 (.bat) 脚本,以便它将以八度运行

    我是使用批处理脚本的新手 并且对八度音程有一定的经验 我有很多使用八度函数检查的数据文件 我正在尝试进行设置 以便我可以双击具有自定义扩展名的文件来直接打开八度函数 想想 当我双击这个文本文件时 它会在记事本中打开 为此 我写了一个非常基本
  • 为什么 Keras 的 train_on_batch 在第二个 epoch 产生零损失和准确率?

    我正在使用一个大数据集 所以我尝试使用 train on batch 或适合 epoch 1 model Sequential model add LSTM size input shape input shape return seque
  • Windows 批处理:如何添加主机条目?

    我想使用此批处理脚本通过使用自动将新条目添加到我的主机文件中windows questions tagged windows batch 不幸的是 剧本只需在主机文件中添加一行 当我以管理员身份运行脚本时 又出了什么问题 echo off
  • (此时出乎意料 - 批处理脚本

    我正在使用下面的批处理脚本并收到错误 这时候是出乎意料的 我知道问题出在第一行 但我不明白出了什么问题 有任何想法吗 script IF 1 LOOP1 SET P isDefault Value Missing do you want t
  • 从 Windows 批处理文件中检测 ANSI 兼容控制台?

    Windows 10 控制台主机 conhost exe has 对 ANSI 转义序列的本机支持 https msdn microsoft com en us library windows desktop mt638032 aspx 旧
  • 任务中的 ConEmu 命令

    我试图在 ConEmu 中获取一个任务来打开多个控制台 并在每个控制台打开时运行一个类似批处理的脚本 例如 打开 Git Bash 将控制台命名为 X 将当前目录设置为 Y 打开另一个 Git Bash 并运行一组命令 例如 cd A B
  • 午夜后时间设置不正确

    我使用以下命令以更易读的格式获取当前日期 时间 set day date 4 2 set mth date 7 2 set yr date 10 4 set hur time 0 2 set min time 3 2 set bdate d
  • 如何使用批处理脚本调用的curl 获取http post 请求的响应代码?

    我正在努力为从我们的工具之一发送 http post 请求提供支持 该工具基本上通过 http 请求执行作业 实现此目的的方法是该工具使用多个参数调用 RunScript bat 该脚本解析这些参数并在验证后发出curl post 请求 P
  • 使用cmd批处理文件获取pdf中的页数

    我可以看到使用 C PHP 和其他语言获取 pdf 中的页数有很多问题 但我想知道使用批处理文件或 cmd 是否有一种简单的方法来获取页数 Using pdftk http www accesspdf com pdftk pdftk my
  • 通过Java从MySQL中获取大量记录

    有一个 MySQL 表 服务器上的用户 它有 28 行和 100 万条记录 也可能会增加 我想从这个表中获取所有行 对它们进行一些操作 然后将它们添加到 MongoDB 中 我知道通过简单的 从用户中选择 操作来检索这些记录将花费大量时间
  • 使用 Windows 批处理文件在文本文件中添加新行

    我有一个文本文件 其中有 200 多行 我只想在第 4 行之前添加一个新行 我使用的是 Windows XP 输入前的示例文本文件 header 1 header 2 header 3 details 1 details 2 输出后 hea
  • 从命令提示符/批处理文件添加环境变量

    我正在尝试在批处理文件中添加环境变量 系统 以下命令显示错误 语法无效 有人可以帮忙吗 对我来说它看起来不错 reg add HKLM SYSTEM CurrentControlSet Control Session Manager Env
  • 批处理脚本 - IF EXIST 复制到 %localappdata% 错误

    我似乎被批处理脚本困住了 需要一些帮助 基本上我需要检查文件是否存在于文件夹中 localappdata 如果确实如此 则覆盖该文件 如果没有放置在不同的位置 那么目前它的内容如下 IF EXIST localappdata foldern
  • 使用正则表达式查找并替换(批处理.BAT)

    我想在多个文本文件中进行查找 替换 如何使用 BAT 实现自动化 我还需要正则表达式 示例 查找
  • 批处理文件中是否存在“Power to”功能? (指数)

    Problem 有没有办法将变量 乘以 数字或其他变量的批处理文件 有这个功能吗 Python 中的一个示例是您可以使用 为 到 的力量 EDIT 您可以在批处理文件中进行数学运算 http en wikipedia org wiki Ba
  • Chrome 扩展 - 消息传递到批处理文件

    我使用了示例项目https developer chrome com extensions samples https developer chrome com extensions samples我能够运行 python 本机应用程序 有

随机推荐