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

如何用批处理脚本按文件名前缀归类文件,忽略下划线至点间内容?

解决方案:按前缀批量归类文件到对应文件夹

你的需求是把共享同一基础前缀的文件(比如MS394-19-1872.tif、MS394-19-1872_mods.xml这类)统一放到以该前缀命名的文件夹中,下面分两种场景给出批处理代码:

场景1:当前文件名格式(下划线区分前缀和后缀)

针对你现在的文件命名(比如MS394-19-1872.tif、MS394-19-1872_mods.xml),可以用下面的批处理代码:

@echo off
setlocal enabledelayedexpansion

:: 遍历当前目录下所有文件
for %%a in (*.*) do (
    :: 跳过文件夹,只处理文件
    if not "%%~fa"=="%%~dpa%%~na" (
        :: 提取文件名(不含扩展名),按下划线分割取第一部分作为文件夹名
        for /f "delims=_" %%b in ("%%~na") do set "folder=%%b"
        :: 创建文件夹(已存在则忽略错误提示)
        md "!folder!" 2>nul
        :: 移动文件到目标文件夹
        move "%%a" "!folder!"
    )
)

endlocal

代码说明:

  • setlocal enabledelayedexpansion:启用延迟变量扩展,确保循环内变量能正确更新和读取。
  • if not "%%~fa"=="%%~dpa%%~na":过滤掉文件夹,只处理文件(避免把新建的文件夹再当成文件处理)。
  • for /f "delims=_" %%b in ("%%~na") do set "folder=%%b":把文件名(不含扩展名)按下划线拆分,取第一部分作为文件夹名——比如MS394-19-1872_mods会被拆成MS394-19-1872,而MS394-19-1872(来自.tif文件)直接作为文件夹名。
  • md "!folder!" 2>nul:创建文件夹,2>nul用来屏蔽“文件夹已存在”的错误提示,避免刷屏。

场景2:改为点分隔后缀的格式(如MS394-19-1872.mods.xml)

如果你把文件名改成点分隔的形式,只需要调整分割符为.即可,代码如下:

@echo off
setlocal enabledelayedexpansion

for %%a in (*.*) do (
    if not "%%~fa"=="%%~dpa%%~na" (
        :: 按点分割取第一部分作为文件夹名
        for /f "delims=." %%b in ("%%~na") do set "folder=%%b"
        md "!folder!" 2>nul
        move "%%a" "!folder!"
    )
)

endlocal

注意事项

  1. 把批处理文件放到要处理的文件所在的文件夹中运行,不要放到其他目录。
  2. 运行前建议先备份文件,避免误操作导致文件丢失。
  3. 如果已经存在同名文件夹,代码会直接把文件移动进去,不会覆盖原有文件(move命令遇到同名文件会询问是否替换,如果你想自动覆盖,可以在move后加/y参数:move /y "%%a" "!folder!")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:19:53