无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7599|回复: 83
打印 上一主题 下一主题

[已解决] 做个批处理,或vbs,把文件夹里指定日期的文件 移动到 新建的以日期为名称的文件夹里

  [复制链接]
跳转到指定楼层
1#
发表于 2023-9-3 17:14:14 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 szmsys 于 2023-9-7 10:32 编辑

求助大家,做个批处理,或者VBS,每天运行,把文件夹里指定日期的文件 移动到 新建的以日期为名称的文件夹里,比如:

C:\sample\ 里面有按日期生成的文件:
2023-09-01-1.txt
2023-09-01-2.txt
。。。
2023-09-02-1.txt
2023-09-02-2.txt
。。。
2023-09-03-1.txt
2023-09-03-2.txt
。。。

批处理,或vbs,在 C:\sample\ 里面生成一个 以昨天的日期为名称的文件夹,比如,今天是2023年9月4日,则生成一个名称是 2023-09-03 的文件夹,然后,把 C:\sampke 文件夹里 生成日期为 2023-09-03 全部文件移动到这个文件夹里,不是此日期生成的文件,不移动。
69#
发表于 2023-9-20 15:01:53 | 只看该作者
感觉把逻辑搞复杂了,既然是天天都要运行,在每晚23:59 把当天的文件放到今天日期目录下不就好了。。
回复

使用道具 举报

68#
发表于 2023-9-9 10:14:41 | 只看该作者
szmsys 发表于 2023-9-9 07:15
大佬,能不能加一个判断句?如果没有符合条件的文件,就不新建文件夹,以免每天运行时,产生大量空文件夹 ...
  1. @echo off

  2. (echo d=Date(^)-1
  3. echo yd=Right(DatePart("yyyy",d^),4^)^&"-"^&Right("0"^&DatePart("m",d^),2^)^&"-"^&Right("0"^&DatePart("D",d^),2^)
  4. echo wscript.echo yd
  5. ) > yd.vbs

  6. for /f %%a in ('cscript yd.vbs') do set yd=%%a
  7. del /q yd.vbs
  8. echo.&echo 即将把%yd%的文件全部转移到%yd%文件夹下。
  9. echo.&pause

  10. set p=c:\sample
  11. ::md "%p%\%yd%" >nul 2>nul
  12. FOR /f "delims=" %%a IN ('dir /b /a:a %p% ^| FINDSTR /ilc:%yd%') DO (
  13.         if not exist %p%\%yd% md %p%\%yd%
  14.         move "%p%\%%a" "%p%\%yd%" )>nul
  15. cls&echo.&if not exist %p%\%yd% (echo %yd%没有发现任何文件。) else echo %yd%的文件转移完成。
  16. timeout /t 2 >nul
复制代码

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 谢谢大佬!

查看全部评分

回复

使用道具 举报

67#
发表于 2023-9-9 10:08:43 | 只看该作者
szmsys 发表于 2023-9-9 06:24
这个可行。只是,需要用任务计划每天定时运行,所以,还得一个批处理才行。因为昨天的文件夹名称每天都在 ...
  1. @echo off
  2. title: 根据文件的修改日期移动自身到对应修改日期命名的文件夹下

  3. for /f "tokens=3" %%i in ('reg query "HKCU\Control Panel\International" ^| findstr /ilc:"sShortDate"') do set sShortDate=%%i
  4. for /f "tokens=2,*" %%j in ('reg query "HKCU\Control Panel\International" ^| findstr /ilc:"sTimeFormat"') do set sTimeFormat=%%k
  5. reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "yyyy/MM/dd" >nul
  6. reg add "HKCU\Control Panel\International" /f /v "sTimeFormat" /t REG_SZ /d "HH:mm:ss" >nul

  7. set p=c:\sample
  8. for /f "tokens=1,3,*" %%i in ('dir /a-d %p% ^| findstr /ilc:"/" ^| findstr /ilvc:"%date%"') do call :filing %%i "%%k"

  9. reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "%sShortDate%" >nul
  10. reg add "HKCU\Control Panel\International" /f /v "sTimeFormat" /t REG_SZ /d "%sTimeFormat%" >nul

  11. cls&echo.&echo 所有文件整理完成。
  12. timeout /t 3 >nul
  13. start %p%
  14. exit

  15. :filing
  16. set f=%1
  17. set f=%f:/=-%
  18. echo %f%
  19. if not exist %p%\%f% md %p%\%f%
  20. move %p%\%2 %p%\%f%
复制代码

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 谢谢大佬!

查看全部评分

回复

使用道具 举报

66#
 楼主| 发表于 2023-9-9 07:15:01 | 只看该作者
ppll2030 发表于 2023-9-4 10:43
两个关键点,一个昨天日期,一个关键字搜索。
刚好有空,嘚瑟一下。各位大佬轻喷。

大佬,能不能加一个判断句?如果没有符合条件的文件,就不新建文件夹,以免每天运行时,产生大量空文件夹。谢谢
回复

使用道具 举报

65#
 楼主| 发表于 2023-9-9 06:24:16 | 只看该作者
ppll2030 发表于 2023-9-9 00:06
那你用上一个把非当天文件转移到昨天文件夹的脚本一起用呗。
先把昨天以前的转移到昨天文件夹,再用这个 ...

这个可行。只是,需要用任务计划每天定时运行,所以,还得一个批处理才行。因为昨天的文件夹名称每天都在变化。
回复

使用道具 举报

64#
发表于 2023-9-9 00:06:18 | 只看该作者
szmsys 发表于 2023-9-8 23:45
使用中,又发现新问题,能不能只归类昨天及以前的文件,不要归类今天的文件。因为今天的还没完全准备好。 ...

那你用上一个把非当天文件转移到昨天文件夹的脚本一起用呗。
先把昨天以前的转移到昨天文件夹,再用这个脚本把里面的文件整理归类就好了。
回复

使用道具 举报

63#
 楼主| 发表于 2023-9-8 23:45:25 | 只看该作者
ppll2030 发表于 2023-9-7 23:40
吃完饭练练手。试试看吧。

使用中,又发现新问题,能不能只归类昨天及以前的文件,不要归类今天的文件。因为今天的还没完全准备好。

谢谢!
回复

使用道具 举报

62#
发表于 2023-9-8 21:58:15 | 只看该作者
helloman 发表于 2023-9-8 21:42
去掉6-7行,把指定目录下昨日及以前的创建的文件移动到以昨日为文件名的文件夹,也挺方便的

去掉保护,在输入的时候,就要谨慎一点,要有心里准备可能引发不可知的结果。
回复

使用道具 举报

61#
发表于 2023-9-8 21:54:21 | 只看该作者
szmsys 发表于 2023-9-8 21:09
那你根据提点,弄个稳定普适版

我那个就是普适版啊。适用于不同个性设置的机子。
回复

使用道具 举报

60#
发表于 2023-9-8 21:44:10 | 只看该作者
跟着楼主蹭批处理整理桌面,挺好!
回复

使用道具 举报

59#
发表于 2023-9-8 21:42:57 | 只看该作者
ppll2030 发表于 2023-9-7 23:40
吃完饭练练手。试试看吧。

去掉6-7行,把指定目录下昨日及以前的创建的文件移动到以昨日为文件名的文件夹,也挺方便的
回复

使用道具 举报

58#
发表于 2023-9-8 21:41:17 | 只看该作者

按照修改日期归档到以修改日期命名的文件夹,挺好!
回复

使用道具 举报

57#
 楼主| 发表于 2023-9-8 21:09:35 | 只看该作者
ppll2030 发表于 2023-9-8 21:04
大佬只是提点。具体需求还是要自己要动手滴。

那你根据提点,弄个稳定普适版
回复

使用道具 举报

56#
发表于 2023-9-8 21:04:46 | 只看该作者
szmsys 发表于 2023-9-8 20:54
算了 还是你的靠谱

大佬只是提点。具体需求还是要自己要动手滴。
回复

使用道具 举报

55#
 楼主| 发表于 2023-9-8 20:54:20 | 只看该作者
ppll2030 发表于 2023-9-8 20:37
有局限性,不过完成你那个修改日期的需求足够了。前提也是你要修改过日期显示不能出现"/"。不然会出错找 ...

算了 还是你的靠谱
回复

使用道具 举报

54#
发表于 2023-9-8 20:37:04 | 只看该作者
szmsys 发表于 2023-9-8 19:50
就这一行代码就行?连个文件夹路径都没有

有局限性,不过完成你那个修改日期的需求足够了。前提也是你要修改过日期显示不能出现"/"。不然会出错找不到文件夹路径。
回复

使用道具 举报

53#
 楼主| 发表于 2023-9-8 19:50:54 | 只看该作者
水泊蓝山 发表于 2023-9-8 16:54
win7 不知道有没有 forfiles 命令

就这一行代码就行?连个文件夹路径都没有
回复

使用道具 举报

52#
 楼主| 发表于 2023-9-8 19:50:30 | 只看该作者
ppll2030 发表于 2023-9-8 17:17
还是大佬厉害啊。又学到一招

只有这一行代码就行?连个文件夹路径都没有
回复

使用道具 举报

51#
发表于 2023-9-8 17:17:28 | 只看该作者
水泊蓝山 发表于 2023-9-8 16:54
win7 不知道有没有 forfiles 命令

还是大佬厉害啊。又学到一招
回复

使用道具 举报

50#
发表于 2023-9-8 16:54:53 | 只看该作者
win7 不知道有没有 forfiles 命令

  1. forfiles /m *.txt /c "cmd /c md @fdate&copy @path @fdate"
复制代码

不用理它建目录的出错信息。

什么年代了还在用win7啊!

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 厉害了

查看全部评分

回复

使用道具 举报

49#
发表于 2023-9-8 14:26:06 | 只看该作者
szmsys 发表于 2023-9-8 12:17
把第 06 07 两行的 if 语句去掉,测试成功,不知道这两行干嘛的?

防止直接回车,和输入错误格式比如后尾带空格等,造成运行失败。

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 明白了,我已删除这两行

查看全部评分

回复

使用道具 举报

48#
 楼主| 发表于 2023-9-8 12:17:00 | 只看该作者
ppll2030 发表于 2023-9-7 23:40
吃完饭练练手。试试看吧。

把第 06 07 两行的 if 语句去掉,测试成功,不知道这两行干嘛的?
回复

使用道具 举报

47#
 楼主| 发表于 2023-9-8 12:05:28 | 只看该作者
ppll2030 发表于 2023-9-7 23:40
吃完饭练练手。试试看吧。

win7测试失败,麻烦检查一下
回复

使用道具 举报

46#
 楼主| 发表于 2023-9-8 11:54:18 | 只看该作者
ppll2030 发表于 2023-9-7 23:40
吃完饭练练手。试试看吧。

辛苦了,我试试
回复

使用道具 举报

45#
发表于 2023-9-7 23:40:14 | 只看该作者
szmsys 发表于 2023-9-7 11:13
老大给个成品批处理试试啊

吃完饭练练手。试试看吧。
  1. @echo off
  2. title: 根据文件的创建日期移动其到对应创建日期命名的文件夹下

  3. :begin
  4. echo.&set /p p=  请输入需整理的文件夹路径(例如:c:\sample ):
  5. if not defined p echo 没发现文件夹路径 &pause&cls&goto :begin
  6. if "%p:~1,2%"==":" (if "%p:~-1%"==" " (set p=%p:~0,-1%)) else (echo 你输入的路径不正确 &pause&cls&goto :begin)
  7. for /f "tokens=3" %%i in ('reg query "HKCU\Control Panel\International" ^| findstr /ilc:"sShortDate"') do set sShortDate=%%i
  8. for /f "tokens=2,*" %%j in ('reg query "HKCU\Control Panel\International" ^| findstr /ilc:"sTimeFormat"') do set sTimeFormat=%%k
  9. reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "yyyy/MM/dd" >nul
  10. reg add "HKCU\Control Panel\International" /f /v "sTimeFormat" /t REG_SZ /d "HH:mm:ss" >nul
  11. for /f "tokens=1,3,*" %%i in ('dir /a-d /tc %p% ^| findstr /ilc:"/"') do call :filing %%i "%%k"
  12. reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "%sShortDate%" >nul
  13. reg add "HKCU\Control Panel\International" /f /v "sTimeFormat" /t REG_SZ /d "%sTimeFormat%" >nul
  14. cls&echo.&echo 所有文件整理完成。
  15. timeout /t 3 >nul
  16. start %p%
  17. exit

  18. :filing
  19. set f=%1
  20. set f=%f:/=-%
  21. echo %f%
  22. if not exist %p%\%f% md %p%\%f%
  23. move %p%\%2 %p%\%f%
复制代码

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 辛苦了,我试试

查看全部评分

回复

使用道具 举报

44#
发表于 2023-9-7 22:48:21 来自手机 | 只看该作者
说起来,现代操作系统都支持文件分组显示,且支持文件名、文件类型、文件大小、文件修改时间等多种分组方式,所以个人感觉,楼主根本就没有归类的必要,直接分组显示即可。
回复

使用道具 举报

43#
发表于 2023-9-7 22:05:22 | 只看该作者
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set title=按文件日期归类
  4. title %title%

  5. ::需要归类的目录
  6. pushd %~dp0\test

  7. for /f %%a in ("%date:/=-%") do set "today=%%a"
  8. for /f %%a in ('dir /b *.txt 2^>nul') do (
  9.         for /f %%b in ("%%~ta") do (
  10.                 set "filedate=%%b"
  11.                 set "filedate=!filedate:/=-!"
  12.                 if not "!filedate!"=="%today%" (
  13.                         set /a n+=1
  14.                         set "list_!n!_file=%%~nxa"
  15.                         set "list_!n!_date=!filedate!"
  16.                 )
  17.         )
  18. )

  19. if !n! EQU 0 (
  20.         color 4f
  21.         echo;无文件可归类!
  22. ) else (
  23.         for /l %%a in (1 1 !n!) do (
  24.                 title %title% %%a/!n!
  25.                 echo 正在移动 !list_%%a_file!
  26.                 if not exist "!list_%%a_date!" mkdir "!list_%%a_date!"
  27.                 move !list_%%a_file! !list_%%a_date!\ >nul
  28.         )
  29.         echo;
  30.         echo;
  31.         echo;文件按日期归类完毕!
  32.         color 2f
  33. )
  34. echo;
  35. pause
复制代码
回复

使用道具 举报

42#
 楼主| 发表于 2023-9-7 11:13:15 | 只看该作者
ppll2030 发表于 2023-9-7 10:43
确实。根据自身日期自动归类更方便了。可以一段时间,或是需要查看的时候,整理一次即可。

老大给个成品批处理试试啊
回复

使用道具 举报

41#
发表于 2023-9-7 10:43:30 | 只看该作者
nttwqz 发表于 2023-9-6 23:39
我觉得楼主的需求描述把人带到了误区,既然每天运行,都要把所谓昨天日期的文件移动到昨天日期的文件夹里面 ...

确实。根据自身日期自动归类更方便了。可以一段时间,或是需要查看的时候,整理一次即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-7-19 14:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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