修改Batch批处理适配通配符作业目录 实现文本字符串检索
批处理脚本适配方案
原脚本核心问题是硬编码了完全匹配作业号的目录路径,新环境下目录名带_作业名称后缀,仅需增加目录前缀匹配逻辑即可适配,完全保留原有使用习惯,调用方式和之前一致,不需要输入完整目录名。同时可按需开启子目录递归检索,满足遍历子目录文件的需求。
核心修改点
- 移除原有固定目录存在校验,改用通配符匹配
f:\acad\下所有以「作业号_」开头的目录,自动识别真实作业目录路径 - 所有后续文件检索逻辑统一使用匹配到的真实目录路径,不改动原有字符串检索规则
- 可选开启子目录递归,替换原有仅遍历一级目录的逻辑,覆盖所有子目录下的目标文件
修改后完整代码
@echo off setlocal :: 参数合法性校验 if "%1"=="" goto error if "%2"=="" goto error :: 匹配带后缀的作业目录(格式:作业号_任意作业名) set "JOB_DIR=" for /d %%d in (f:\acad\%2_*) do ( set "JOB_DIR=%%d" goto dir_found ) :dir_found if not defined JOB_DIR goto error2 :: 初始化结果输出文件 echo. *** Search results for all Geodimeter raw data files *** >c:\dos_survey\null. echo. >>c:\dos_survey\null. echo. *** Searching for 5=%1 *** >>c:\dos_survey\null. :: 如需仅检索一级目录,删除下一行的 /R "%JOB_DIR%" 参数,路径改回 "%JOB_DIR%\*.%2" 即可 FOR /R "%JOB_DIR%" %%F IN (*.%2) DO FIND /I "5=%1" "%%F" >>c:\dos_survey\null. echo. >>c:\dos_survey\null. echo. *** Searching for PT%1 *** >>c:\dos_survey\null. echo. >>c:\dos_survey\null. FOR /R "%JOB_DIR%" %%F IN (*.%2) DO FIND /I "PT%1" "%%F" >>c:\dos_survey\null. echo. >>c:\dos_survey\null. echo. *** Searching for %1, *** >>c:\dos_survey\null. echo. >>c:\dos_survey\null. FOR /R "%JOB_DIR%" %%F IN (*.%2) DO FIND /I "%1," "%%F" >>c:\dos_survey\null. echo. >>c:\dos_survey\null. echo. GPS file search results: >>c:\dos_survey\null. FOR /R "%JOB_DIR%" %%F IN (GPS*.%2) DO FIND /I "%1," "%%F" >>c:\dos_survey\null. echo. >>c:\dos_survey\null. echo. TFR file search results: >>c:\dos_survey\null. FOR /R "%JOB_DIR%" %%F IN (T*.%2) DO FIND /I "--%1" "%%F" >>c:\dos_survey\null. echo. CALL LN echo. goto end :error echo. echo. ********************************************************************** echo. ***** USAGE: FINDPT [point number] [job] ****** echo. ***** EXAMPLE: To find point number 1254 in job number 511, ****** echo. ***** type "FINDPT 1254 511" followed by [RETURN]. ****** echo. ********************************************************************** echo. goto end :error2 echo. echo. Invalid syntax, or job directory starting with "%2_" does not exist. goto error :end endlocal
补充说明
- 脚本默认开启子目录递归检索,如需和旧脚本保持一致仅搜索作业目录根级文件,按代码注释修改FOR循环格式即可
- 所有FIND命令新增
/I参数实现不区分大小写匹配,如需严格大小写匹配,直接删除该参数 - 调用方式与旧脚本完全一致:例如作业号511对应目录为
511_某某道路项目时,直接执行FINDPT 1254 511即可,无需输入目录后缀内容 - 若同一作业号下存在多个
作业号_*格式的目录,脚本默认匹配文件排序下第一个命中的目录,如有多目录匹配需求可自行调整遍历逻辑
内容的提问来源于stack exchange,提问作者MIKEY9821
相关产品推荐
相关产品推荐

