首页 > 解决方案 > 如何根据文件名将文件名排序到文件夹中

问题描述

我正在尝试根据文件名称的开头将文件移动到文件夹中,

比如我有六个文件,xx_0_1.png, xx_0_2.png, xx_1_1.png, xxx_0_1.png, xxx_0_2.png, xxx_1_1.png

(他们并不总是遵循这种拥有三个的模式)

我需要他们根据 _0 之前的字符对文件夹进行分类(因为可能有 hello_world_0_1.png 之类的东西,名称从不包含整数。之后的数字对它们的大小没有限制。

因此,如果我有 fruit_0_1.png、fruit_0_2.png、fruit_1_1.png、fence_0_1.png、fence_0_2.png、hello_world_0_1.png 和 hello_world_0_2.png,它们会分类到这样的文件夹中:

水果

栅栏

你好世界

png 文件名称的格式始终为 (sometext) (firstnumber) (secondnumber).png sometext 可以包含下划线并且经常包含下划线,但它从不包含数字。firstnumber 和 secondnumber 可以和它们最终一样大(通常总是小于 20,但可以更多)并且文件总是 .png 类型

我已经尝试了其他堆栈溢出问题的一些解决方案,但是我还没有找到解决方案。

我得到的最接近的是将每个文件单独分类到他们自己的文件夹中(这不是我想要的),这个例子就是我所拥有的:

@echo off
for %%a in (*.*) do (
md "%%~na" 2>nul
move "%%a" "%%~na"
)
cd ..
del %%~na
pause

它目前将每个文件放入自己的文件夹中,而不是在名称后拆分。

标签: batch-file

解决方案


这是一个示例脚本:

@For %%F In ("*_*_*.png")Do @(Set "oF=%%F"
    SetLocal EnableDelayedExpansion
    For %%D In ("!oF:_=\!\..\..")Do @(Set "oD=%%~dpnD"
        Set "oD=!oD:%__CD__%=!"
        RoboCopy . "!oD:\=_!" "%%F" /Mov>NUL)
    EndLocal)

由于您的问题只是一个代码请求,因此我不会在发布时解释它的工作原理、使用方法或针对您的问题之外的任何场景进行扩展。


推荐阅读