You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows批处理脚本中使用指定正则表达式匹配文件名

解决Windows批处理中使用正则匹配特定文件名的问题

修改后的完整脚本

@echo off
setlocal enabledelayedexpansion

set "sourceDir=C:\Users\tar\Desktop\inbound"
set "targetDir=C:\Software\components\data\GateIn\in"
set "count=0"
set "fullFilename="

for %%I in ("%sourceDir%\*.*") do (
    set /a "count+=1"
    set "fullFilename=%%~nxI"  :: 获取包含扩展名的完整文件名
)

if %count% geq 2 (
    exit /b 2
) else if %count% equ 0 (
    exit /b 0
) else if %count% equ 1 (
    :: 调用PowerShell执行正则匹配
    for /f %%A in ('powershell -command "[System.Text.RegularExpressions.Regex]::IsMatch('!fullFilename!', 'COLLAT\.CONFIDENTIAL\.\d{14}\.NO-ACCT\.\d{3}\.ISO')"') do (
        if %%A equ 1 (
            xcopy /y "%sourceDir%\!fullFilename!" "%targetDir%"
            exit /b 1
        ) else (
            exit /b 3
        )
    )
)

endlocal

关键修改说明

  • 修正文件名获取:原脚本用%%~nI仅获取不带扩展名的文件名,改为%%~nxI后可拿到包含.ISO后缀的完整文件名,确保正则匹配的准确性。
  • 正则表达式转义:正则中的.是通配符,要匹配文件名里的实际点,必须转义为\.,最终正则为COLLAT\.CONFIDENTIAL\.\d{14}\.NO-ACCT\.\d{3}\.ISO,其中:
    • \d{14}匹配14位数字时间戳(如20231013125640)
    • \d{3}匹配3位数字编号(如416)
  • PowerShell调用逻辑:借助PowerShell的正则引擎完成匹配,返回1表示匹配成功,0表示失败,批处理根据返回值执行对应操作。

逻辑验证

  • 源目录文件数≥2:直接返回退出码2
  • 源目录无文件:返回退出码0
  • 仅1个文件时:
    • 文件名匹配正则:复制到目标目录,返回退出码1
    • 不匹配正则:返回退出码3

内容的提问来源于stack exchange,提问作者Jon Carter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:03:11