zhengzhenhui945 发表于 2024-7-24 00:24

bat批处理之&按文件属性年月自动归类

来源是获取文件的属性里面修改时间为判断标准:victory:
因为这样子设定时间会准确一些:lol
遍历目标文件并依次按年月分类
方案1
文件夹架构       2024年01月      2024年02月
@echo off
rem 批处理保存为ansi编码格式名称
rem 文件格式为【XX年XX月】
setlocal enabledelayedexpansion

for /f "delims=" %%a in ('dir /b /a-d') do (
    if "%%~xa" neq ".bat" (
      for %%b in ("%%a") do (
            set "fileModDate=%%~tb"
            set "year=!fileModDate:~0,4!"
            set "month=!fileModDate:~5,2!"
            set "targetFolder=!year!年!month!月"
            if not exist "!targetFolder!" (
                md "!targetFolder!"
            )
            move "%%a" "!targetFolder!"
      )
    )
)
方案2
文件夹架构      一级      二级    文件夹
                        2024年----1月
                                    ----2月
@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%a in ('dir /b /a-d') do (
    if "%%~xa" neq ".bat" (
      for %%b in ("%%a") do (
            set "fileModDate=%%~tb"
            set "year=!fileModDate:~0,4!"
            set "month=!fileModDate:~5,2!"
            set "targetFolder=!year!年\!month!月"
            if not exist "!targetFolder!" (
                md "!targetFolder!"
            )
            move "%%a" "!targetFolder!"
      )
    )
)
                                       
方案3
文件夹架构      一级      二级      三级文件夹
                        2024年----1月----12日
                                             ----13日
                                    ----2月 ---09日
@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%a in ('dir /b /a-d') do (
    if "%%~xa" neq ".bat" (
      for %%b in ("%%a") do (
            set "fileModDate=%%~tb"
            set "year=!fileModDate:~0,4!"
            set "month=!fileModDate:~5,2!"
            set "day=!fileModDate:~8,2!"
            set "targetFolder=!year!年\!month!月\!day!日"
            if not exist "!targetFolder!" (
                md "!targetFolder!"
            )
            move "%%a" "!targetFolder!"
      )
    )
)
大家也可以以此代码自行修改精确到时间或者星期几
加个判断到上午下午或者晚上
有点太那啥鸡肋了,我就不整了
使用方法【把代码保存下来,粘贴到txt,将.txt后缀改为.bat后缀,放到自己需要处理的目录即可】
测试文件请做好备份!!
BAT成品下载下载链接:
免费评分支持一下谢谢

zhengzhenhui945 发表于 2024-7-24 14:17

红蓝黄 发表于 2024-7-24 05:04
提取文件有两个问题:1、文件重名,可以重命名文件吗?2、提取完文件,把空文件夹删除

很好的建议,以下是提取文件后删除空文件夹,
遇到同名文件会在后缀从 _1 开始递增
请做好做好备份 。
@echo off

rem 提取文件到根目录
for /r "%cd%" %%f in (*) do (
    set "newName=%%~nf"
    set "ext=%%~xf"
    setlocal enabledelayedexpansion
    if exist "!newName!!ext!" (
      set /a count=1
      :loop
      if not exist "!newName!_!count!!ext!" (
            move "%%f" "!newName!_!count!!ext!"
            goto :next
      )
      set /a count+=1
      goto :loop
    )
    move "%%f" "!newName!!ext!"
    :next
    endlocal
)

rem 删除空文件夹
for /d %%d in (*) do (
    rd "%%d" 2>nul
)

be1ieveme 发表于 2024-7-24 00:40

学习了,这个很不错,谢谢分享

shenhai666 发表于 2024-7-24 01:01

新思路。

zhengzhenhui945 发表于 2024-7-24 01:12

请务必备份了先测试文件!!!!!
以下代码用于提取根目录的所有文件
做好备份   在测试的文件夹内提取出文件再做归类
@echo off
for /f "delims=" %%a in ('dir /a-d /b /s ') do (move "%%~a" ./)

zerozaki1024 发表于 2024-7-24 02:01

学习新思路了,我自己也试试看。

红蓝黄 发表于 2024-7-24 05:04

zhengzhenhui945 发表于 2024-7-24 01:12
请务必备份了先测试文件!!!!!
以下代码用于提取根目录的所有文件
做好备份   在测试的文件夹内提取 ...

提取文件有两个问题:1、文件重名,可以重命名文件吗?2、提取完文件,把空文件夹删除

llyaomo 发表于 2024-7-24 08:27

红蓝黄 发表于 2024-7-24 05:04
提取文件有两个问题:1、文件重名,可以重命名文件吗?2、提取完文件,把空文件夹删除

我做了个py脚本的,和楼主的功能差不多,但是可以检查重名文件。https://www.123pan.com/s/lwtbVv-Kf6KA.html?提取码:LVCB

95zz 发表于 2024-7-24 08:30

超有用的

kangta520 发表于 2024-7-24 08:38

学习学习,谢谢分享

lzmomo 发表于 2024-7-24 08:43

在工作中很实用,如果可以搞定相同文件名就好了
页: [1] 2 3
查看完整版本: bat批处理之&按文件属性年月自动归类