如何创建FULL_REMOTE_DIR与FULL_LOCAL_DIR的联合文件名列表
生成两个目录文件的联合列表解决方案
方法1:直接遍历并输出联合列表
将两个目录路径用空格分隔,放入同一个FOR循环中,即可一次性遍历两个目录的所有文件并输出:
@echo off SETLOCAL enabledelayedexpansion TITLE Demo Mode ECHO small script to showcase ECHO how to iterate folders SET mypath=%cd% SET "remote_dir=\remote\*" SET "local_dir=\local\*" SET "other_dir=\other\*" SET "FULL_REMOTE_DIR=%mypath%%remote_dir%" SET "FULL_LOCAL_DIR=%mypath%%local_dir%" SET "FULL_OTHER_DIR=%mypath%%other_dir%" ECHO 联合文件列表: REM 遍历两个目录的文件,%%~nxa仅输出文件名+扩展名,需要完整路径则用%%a FOR %%a IN ("%FULL_REMOTE_DIR%" "%FULL_LOCAL_DIR%") DO ( ECHO %%~nxa )
方法2:将文件名收集到变量中统一输出
如果需要把所有文件名存储到变量里供后续使用,可以通过延迟扩展拼接变量实现:
@echo off SETLOCAL enabledelayedexpansion TITLE Demo Mode ECHO small script to showcase ECHO how to iterate folders SET mypath=%cd% SET "remote_dir=\remote\*" SET "local_dir=\local\*" SET "other_dir=\other\*" SET "FULL_REMOTE_DIR=%mypath%%remote_dir%" SET "FULL_LOCAL_DIR=%mypath%%local_dir%" SET "FULL_OTHER_DIR=%mypath%%other_dir%" SET "COMBINED_LIST=" REM 收集远程目录文件名 FOR %%a IN ("%FULL_REMOTE_DIR%") DO ( SET "COMBINED_LIST=!COMBINED_LIST! %%~nxa" ) REM 收集本地目录文件名 FOR %%a IN ("%FULL_LOCAL_DIR%") DO ( SET "COMBINED_LIST=!COMBINED_LIST! %%~nxa" ) ECHO 联合文件列表: ECHO !COMBINED_LIST:~1! REM 移除开头多余的空格
方法3:去重后的联合列表(处理重复文件名)
如果两个目录存在相同文件名,想要只保留一次,可通过记录已输出文件的方式实现去重:
@echo off SETLOCAL enabledelayedexpansion TITLE Demo Mode ECHO small script to showcase ECHO how to iterate folders SET mypath=%cd% SET "remote_dir=\remote\*" SET "local_dir=\local\*" SET "other_dir=\other\*" SET "FULL_REMOTE_DIR=%mypath%%remote_dir%" SET "FULL_LOCAL_DIR=%mypath%%local_dir%" SET "FULL_OTHER_DIR=%mypath%%other_dir%" ECHO 去重后的联合文件列表: SET "SEEN_FILES=" REM 遍历远程目录并输出未重复的文件 FOR %%a IN ("%FULL_REMOTE_DIR%") DO ( IF "!SEEN_FILES:%%~nxa=!"=="!SEEN_FILES!" ( ECHO %%~nxa SET "SEEN_FILES=!SEEN_FILES! %%~nxa" ) ) REM 遍历本地目录并输出未重复的文件 FOR %%a IN ("%FULL_LOCAL_DIR%") DO ( IF "!SEEN_FILES:%%~nxa=!"=="!SEEN_FILES!" ( ECHO %%~nxa SET "SEEN_FILES=!SEEN_FILES! %%~nxa" ) )
内容的提问来源于stack exchange,提问作者3kstc
相关产品推荐
相关产品推荐

