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

时间:2018-08-24 04:30:48

标签: batch-file

对于此目录中的每个文件夹:

"F:\!Storage\!FS Addons\!X-Plane\!Tools\!Ortho4XP\Tiles"

以下是上述目录中的示例文件夹(数字为GPS坐标):

zOrtho4XP_+65-023
zOrtho4XP_+65-024
zOrtho4XP_+65-025
zOrtho4XP_+66-015
zOrtho4XP_+66-016

这些zOrtho4XP_*文件夹包含卫星图像,这些图像将覆盖在X-Plane 11 Flight Simulator的默认风景上。

为了使卫星图像出现在模拟器中,需要将其文件夹名称添加到scenery_packs.ini文件中,该文件位于
"E:\X Plane 11\X-Plane 11\Custom Scenery\scenery_packs.ini"

以下是scenery_packs.ini文件的示例:请注意该文件如何包含包含卫星图像的文件夹中的文件夹名称

SCENERY_PACK Custom Scenery/zOrtho4XP_+65-023/
SCENERY_PACK Custom Scenery/zOrtho4XP_+65-024/
SCENERY_PACK Custom Scenery/zOrtho4XP_+65-025/
SCENERY_PACK Custom Scenery/zOrtho4XP_+66-015/
SCENERY_PACK Custom Scenery/zOrtho4XP_+66-016/

这些zOrtho4XP_*文件夹是分批下载的,有些批次包含数十个zOrtho4XP_*文件夹,并且每个文件夹名称都必须添加到scenery_packs.ini文件中。这就是我要避免手动执行的操作,因为在接下来的几周中我将做很多这样的事情,而且我不想不必逐行手动添加这些文件夹;如果不超过1,000,则为数百。

我已经设法对此进行了草拟,但据我所知,这与批处理有关:

@echo off
setlocal

set "target=F:\!Storage\!FS Addons\!X-Plane\!Tools\!Ortho4XP\Tiles"
set "destination=E:\X Plane 11\X-Plane 11\Custom Scenery\scenery_packs.ini"

    for %%a in ("%target%") do (
        findstr %%~nxA 
        if exist IGNORE 
        )else(
        echo %%~nxA >> %destination% )

endlocal
pause

1 个答案:

答案 0 :(得分:2)

@echo off
setlocal

set "target=F:\!Storage\!FS Addons\!X-Plane\!Tools\!Ortho4XP\Tiles"
set "destination=E:\X Plane 11\X-Plane 11\Custom Scenery\scenery_packs.ini"

(
    for /d %%A in ("%target%\*") do @(
        >nul findstr /c:"SCENERY_PACK Custom Scenery/%%~nxA/" "%destination%" ^
        || echo SCENERY_PACK Custom Scenery/%%~nxA/
    )
) >> "%destination%"

这将使每个子文件夹名称位于%target%的根目录中。 Findstr将在%destination% ini文件中搜索文件夹名称模式。 如果失败,则将文件夹名称模式回显到%destination%文件。

^是连续行字符,因为一行很长。