找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32221|回复: 3

[文件操作] [小白求助]根据文件修改日期自动创建文件夹并移动文件[已解决]

[复制链接]
发表于 2018-3-26 15:14:19 | 显示全部楼层 |阅读模式
本帖最后由 13917134 于 2018-3-27 10:20 编辑

在一个文件夹下一个若干个文件,希望可以根据文件修改时间(是修改时间,因为创建时间可能有很多是一样的。单修改时间可以进行分类)自动建立以修改时间为日期的文件夹,并吧相同一天修改时间下的文件都移动到里面
求代码
文件名结构如下:
文件名                    |    修改时间
23545.csv              |    2016-09-23 16:33 PM
54782.dt2              |    2016-09-23 16:55 PM
123123.ts2             |   2016-10-22 15:55 PM
wksj11.csv             |    2017-2-14  12:22 AM
b20160809.csv       |    2017-2-14 12:22 AM

建立以修改时间作为名字的文件夹可以是2016-01-05或者是20160105这样的文件夹名字,目的只是需要把这个文件夹下上万文件分类,根据修改日期天数移动到相应的根据天数日期建立的文件夹下。
百度了一下以及在论坛中搜索相关内容未发现此类相关
找到一个相关代码,不知道怎么修改。
求大神解答
  1. cd /d %~dp0
  2. setlocal enabledelayedexpansion

  3. set NowYM=%date:~,4%%date:~5,2%

  4. if not exist !NowYM! md !NowYM!

  5. for /f "delims=" %%a in ('dir /a-d/b/tw') do (
  6.     if not "%%~fa"=="%~f0" (
  7.         set FileYM=%%~ta
  8.         set FileYM=!FileYM:~,4!!FileYM:~5,2!
  9.         if !FileYM! equ !NowYM! move "%%~a" !NowYM!\
  10.     )
  11. )
  12. pause
复制代码
发表于 2018-3-26 16:09:59 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-3-26 16:11 编辑
  1. @ECHO OFF&setlocal enabledelayedexpansion
  2. set "SrcDir=E:\IRead\批处理大全"
  3. cd /d "%SrcDir%"
  4. for /f "tokens=1-3 delims=" %%a in ('dir /a-d/b') do (
  5.         set "write_date=%%~ta"
  6.         set "write_date=!write_date:/=!"
  7.         set "write_date=!write_date:~0,8!"
  8.         if not exist !write_date! md "!write_date!"
  9.         copy /y "%%a" "!write_date!"
  10. )
复制代码
最好将第二行的路径改成源目录路径,然后将BAT放源目录外执行。否则这个BAT文件也会被分类。
若是不介意述问题,把2,3行都删除,放在源目录执行。
若无问题,将第9行COPY改成MOVE可实现文件移动。

评分

参与人数 1技术 +1 收起 理由
13917134 + 1 完全可以用

查看全部评分

 楼主| 发表于 2018-3-27 10:20:24 | 显示全部楼层
回复 2# yhcfsr
运行过后发现年在日期之后。做了一点小修改。谢谢大神的代码,
修改后的代码如下
  1. @ECHO OFF&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3 delims=" %%a in ('dir /a-d/b') do (
  3.         set "write_date=%%~ta"
  4.         set "write_date=!write_date:/=!"
  5.         set "write_date=!write_date:~4,4!!write_date:~0,4!"
  6.         if not exist !write_date! md "!write_date!"
  7.         move /y "%%a" "!write_date!"
  8. )
复制代码
发表于 2018-3-27 10:22:05 | 显示全部楼层
回复 3# 13917134


不同的系统设置会导致 %%~ta 获取到的日期格式不一样,所以可移植性较差。
在不同的电脑上执行代码之前,需要先做好测试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:11 , Processed in 0.016456 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表