检查字符串是否存在并回显到文件

检查字符串是否存在并回显到文件

伙计们。上次我来这里时得到了太多帮助,所以我想再来这里寻求更多帮助,哈哈。不过说真的。那些帮助我回答上一个问题的人在过去几天里就为我节省了几个小时的工作时间。再次感谢他们!

这次我需要做的是:
对于此目录中的每个文件夹:“F:\!Storage\!FS Addons\!X-Plane\!Tools\!Ortho4XP\Tiles”

请执行下列操作:

1)检查文件夹名称是否存在于不同目录中的文件中:
“E:\X Plane 11\X-Plane 11\Custom Scenery\scenery_packs.ini”
2)如果不存在,则将文件夹名称回显到文件(scenery_packs.ini)中
3)如果存在,则不回显(基本上只是忽略)并继续检查下一个文件夹,直到完成

我知道要将某些内容回显到文件中,可以使用echo Hello, World! >> file.ini

我的问题在于变量,因为有多个文件夹。我的FOR循环很糟糕 :(

谢谢您的任何建议!

答案1

我没有在真实系统上测试,但应该没问题:

@echo off

setlocal EnableDelayedExpansion

set BaseFolder=F:\!Storage\!FS Addons\!X-Plane\!Tools\!Ortho4XP\Tiles
set FileForSearch=E:\X Plane 11\X-Plane 11\Custom Scenery\scenery_packs.ini
set NewFoldersList=%~dp0\NewFolders.txt

if exist ("!NewFoldersList!") (
  del /q "!NewFoldersList!" >nul 2>&1
)

for /d /r %%A in ("!BaseFolder!") do (
  set tmp_FolderFound=N

  for /f %%B in ("!FileForSearch!") do (
    if /i not [!FolderFound!]==[S] (
      if /i [%%A]==[%%B] (
        set tmp_FolderFound=S
        echo %%A>>"!NewFoldersList!"
      )
    )
  )
)

if exist ("!NewFoldersList!") (
  copy /b "!FileForSearch!"+"!NewFoldersList!" "!FileForSearch!" >nul 2>&1
)

setlocal DisableDelayedExpansion
endlocal

相关内容