如何从批处理变量的Mod列表提取文件夹名并自动生成校验逻辑
自动提取Mod列表并生成存在性校验的批处理方案
实现思路
- 从
Antistasi2变量中剥离出-mod=后缀的Mod路径集合 - 按分号
;分割每个独立的Mod路径项 - 从每个路径中提取出
@开头的Mod文件夹名 - 循环遍历所有提取到的Mod名,自动生成并执行存在性检查语句
完整批处理代码
@echo off setlocal enabledelayedexpansion :: 若需从launcher.bat导入Antistasi2变量,可添加call launcher.bat :: set Antistasi2=-mod=%ModPath%@CBA_A3;%ModPath%@Antistasi;%ModPath%@CAC_AE1.4;%ModPath%@AWR;%ModPath%@RealEngine;%ModPath%@ace;%ModPath%@EnhancedMovement;%ModPath%@EnhancedMovementRework;%ModPath%@MfHealAbort;%ModPath%@VET_Unflipping;%ModPath%@AdvancedRappelling;%ModPath%@AdvancedUrbanRappelling;%ModPath%@Blastcore :: 提取-mod=之后的所有内容 set "mod_list=!Antistasi2:-mod=!" :: 遍历分割后的每个Mod路径 for %%i in ("!mod_list:;=" "!") do ( :: 提取@开头的Mod文件夹名(移除%ModPath%前缀) set "mod_folder=%%~i" set "mod_folder=!mod_folder:%ModPath%=!" :: 执行存在性检查 if not exist "%ModPath%!mod_folder!" echo !mod_folder! NOT FOUND ) endlocal
代码说明
setlocal enabledelayedexpansion:启用延迟变量扩展,确保循环内部变量能实时更新!Antistasi2:-mod=!:移除变量开头的-mod=字符串,得到纯Mod路径集合!mod_list:;=" "!:将分号分隔的路径转换为带引号的列表,让for循环能逐个读取!mod_folder:%ModPath%=!:移除每个路径中的%ModPath%前缀,得到纯Mod文件夹名(如@CBA_A3)- 最后通过
if not exist语句检查每个Mod文件夹是否存在,不存在则输出提示
注意事项
- 确保
%ModPath%变量已正确定义且末尾无多余斜杠 - 如果需要从
launcher.bat中导入Antistasi2变量,可在代码开头添加call launcher.bat
内容的提问来源于stack exchange,提问作者Batch N00b
相关产品推荐
相关产品推荐

