无忧启动论坛

标题: 做个批处理,或vbs,把文件夹里指定日期的文件 移动到 新建的以日期为名称的文件夹里 [打印本页]

作者: szmsys    时间: 2023-9-3 17:14
标题: 做个批处理,或vbs,把文件夹里指定日期的文件 移动到 新建的以日期为名称的文件夹里
本帖最后由 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 全部文件移动到这个文件夹里,不是此日期生成的文件,不移动。
作者: 9zhmke    时间: 2023-9-3 17:47
在批处理里面使用for取得日期:
  1. for /f %%i in ('date /t') do set dir=%%i
  2. set i=%dir:/=-%
  3. echo %i%
复制代码
再建立一个文件夹,使用move 命令把文件移动到文件夹里就可以了
如果你要写一个程序,可以自己动手先试,哪里有问题再问更好一些
作者: ljm008    时间: 2023-9-3 18:04
这个可以有,谢谢
作者: yc2428    时间: 2023-9-3 18:50
9zhmke 发表于 2023-9-3 17:47
在批处理里面使用for取得日期:
再建立一个文件夹,使用move 命令把文件移动到文件夹里就可以了
如果你要 ...

学习了
作者: szwp    时间: 2023-9-3 18:59
批处理计算昨天日期码较长,调用vbs或ps可少码。如果天天运行的话可提前建好明天的文件夹
作者: szmsys    时间: 2023-9-3 23:52
szwp 发表于 2023-9-3 18:59
批处理计算昨天日期码较长,调用vbs或ps可少码。如果天天运行的话可提前建好明天的文件夹

谢谢您!是天天运行。麻烦给个成品,谢谢
作者: szwp    时间: 2023-9-4 07:47
szmsys 发表于 2023-9-3 23:52
谢谢您!是天天运行。麻烦给个成品,谢谢

你将今天的写好,昨天也快了。一天运行一次可以取最新文件夹就是昨天的,顺便将明天的文件夹建好
作者: ach64    时间: 2023-9-4 09:01
这是什么工作要求的?
作者: fulibo    时间: 2023-9-4 09:04
看起来像是备份日志或者文档一类!
作者: nttwqz    时间: 2023-9-4 09:06
szwp 发表于 2023-9-3 18:59
批处理计算昨天日期码较长,调用vbs或ps可少码。如果天天运行的话可提前建好明天的文件夹

有高手对算法有研究,昨天日期计算有1行或者几行的,你搜搜就有。
作者: ppll2030    时间: 2023-9-4 10:43
两个关键点,一个昨天日期,一个关键字搜索。
刚好有空,嘚瑟一下。各位大佬轻喷。
  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 move "%p%\%%a" "%p%\%yd%" >nul
  13. cls&echo.&echo %yd%的文件转移完成。
  14. timeout /t 2 >nul
复制代码



作者: szwp    时间: 2023-9-4 11:54
天天运行的话只要将不是今天的移走
作者: batche    时间: 2023-9-5 00:35
nttwqz 发表于 2023-9-4 09:06
有高手对算法有研究,昨天日期计算有1行或者几行的,你搜搜就有。

有这么简单的批处理算法吗?分享一下,主要是跨月、跨年和日期显示格式的问题,没有日期函数的话,批处理写起来比较复杂
作者: szmsys    时间: 2023-9-5 09:31
ppll2030 发表于 2023-9-4 10:43
两个关键点,一个昨天日期,一个关键字搜索。
刚好有空,嘚瑟一下。各位大佬轻喷。

测试好用!感谢您,高手啊。另外,你这个是根据文件名判断。
能不能做个根据根据文件生成日期来判断的,无视文件名。
谢谢
作者: szmsys    时间: 2023-9-5 10:16
ppll2030  2023-9-4 10:43

пNλ硣


作者: ppll2030    时间: 2023-9-5 15:14
szmsys 发表于 2023-9-5 09:31
测试好用!感谢您,高手啊。另外,你这个是根据文件名判断。
能不能做个根据根据文件生成日期来判断的, ...

修改一下查找参数就好啦。
  1. @echo off
  2. title: 查找和移动前一天创建的文件
  3. (echo yd=Date(^)-1
  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. SET YYD=%yd:/=-%
  9. echo.&echo 即将把%yd%创建的文件全部转移到%YYD%文件夹下。
  10. echo.&pause
  11. set p=c:\sample
  12. md "%p%\%YYD%" >nul 2>nul
  13. FOR /f "tokens=3,*" %%a IN ('dir /a-d /tc %p% ^| FINDSTR /ilc:%yd%')  DO move "%p%\%%b" "%p%\%YYD%" >nul
  14. cls&echo.&echo %yd%的文件转移完成。
  15. timeout /t 2 >nul
复制代码

作者: szwp    时间: 2023-9-5 15:34
for /f %%d in ("%date%") do set d=%%d
for %%f in (*) do call :chk %%f %%~tf
pause

:chk
if %1==%~nx0 goto :eof
if %2==%d% goto :eof
set m=%d:/=-%
if not exist %m% md %m%
move %1 %m%

作者: ppll2030    时间: 2023-9-5 15:42
dir /a-d /tc  参数没错。你看看是不是你看错了。把修改日期看成创建日期了。资源管理器默认显示的修改日期哦。


作者: ppll2030    时间: 2023-9-5 15:50
ppll2030 发表于 2023-9-5 15:42
dir /a-d /tc  参数没错。你看看是不是你看错了。把修改日期看成创建日期了。资源管理器默认显示的修改日期 ...

管理器默认是修改日期,你按图中把创建日期勾上。看看是不是有误。


作者: szwp    时间: 2023-9-5 15:54
创建时间则改成
for /f "tokens=1,5" %%1 in ('"dir /a-d/tc|Findstr :|findstr /v \"') do call :chk %%2 %%1
作者: szmsys    时间: 2023-9-5 16:05
ppll2030 发表于 2023-9-5 15:50
管理器默认是修改日期,你按图中把创建日期勾上。看看是不是有误。

不会错的,是创建时间,。我把系统日期调到昨天,然后新建的文件,然后再把系统日期改成今天
作者: ppll2030    时间: 2023-9-5 16:20
szmsys 发表于 2023-9-5 16:05
不会错的,是创建时间,。我把系统日期调到昨天,然后新建的文件,然后再把系统日期改成今天

知道问题在哪了。

你任务栏右下角的的日期是不是这样的? 2023/9/5

导入这个注册表,把它改成 2023/09/05 的格式就可以了。
  1. Windows Registry Editor Version 5.00

  2. [HKEY_CURRENT_USER\Control Panel\International]
  3. "sShortDate"="yyyy/MM/dd"
复制代码

作者: szmsys    时间: 2023-9-5 16:25
本帖最后由 szmsys 于 2023-9-5 16:39 编辑
ppll2030 发表于 2023-9-5 16:20
知道问题在哪了。

你任务栏右下角的的日期是不是这样的? 2023/9/5

好用了!您真厉害【表情】高人啊

问题又来了

如果我的系统日期格式是 2023/9/5 或者 2023-9-5 或者 2023-09-05 等,我怎么修改您的批处理文件,才能匹配?谢谢
还有一个问题,如果文件名里含有 2023-09-04 字样,即使是今天生成的文件,也被移动了,咋回事?

作者: ppll2030    时间: 2023-9-5 16:42
szmsys 发表于 2023-9-5 16:25
好用了!您真厉害【表情】高人啊

问题又来了

把这一条 reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "yyyy/MM/dd"
放在批处理的第三行,也就是 "title: 查找和移动前一天创建的文件" 这一行的下面即可。

因为cmd下日期的默认格式就是yyyy/mm/dd,而系统默认是yyyy/m/d,
批处理的日期是根据系统获取的,因为两者格式不统一,就出问题了。
最简单的方法就是修改系统默认,做到统一,也方便强迫症看日期时是整齐同宽,而不是一长一短的。


作者: szmsys    时间: 2023-9-5 17:56
ppll2030 发表于 2023-9-5 16:42
把这一条 reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "yyyy/MM/dd"
...

为什么今天生成的含有昨天日期的文件名的文件,还是被移动了?是不是你没去掉根据文件名判断是否移动文件啊?
作者: ppll2030    时间: 2023-9-5 18:10
szmsys 发表于 2023-9-5 17:56
为什么今天生成的含有昨天日期的文件名的文件,还是被移动了?是不是你没去掉根据文件名判断是否移动文件 ...

你是不是用错第一个批处理了
第二个批处理关键字是2023/09/04的格式。这个不可能用作文件名命名的。
还有一个情况,是不是你的系统时间格式是2023-09-05,你没导注册表改为2023/09/05格式

作者: szmsys    时间: 2023-9-5 19:39
ppll2030 发表于 2023-9-5 18:10
你是不是用错第一个批处理了
第二个批处理关键字是2023/09/04的格式。这个不可能用作文件名命 ...

用的第二个批处理
时间格式是 2023-09-05

即使时间格式是 2023-09-05 为什么把今天生成的含有昨天日期 2023-09-04 的文件名的文件给移动了?为什么?
作者: gamewater    时间: 2023-9-5 19:51
现在发现用python搞这些更方便。学习成本很低,可读性又比批处理强。
作者: ppll2030    时间: 2023-9-5 20:45
本帖最后由 ppll2030 于 2023-9-6 01:31 编辑
szmsys 发表于 2023-9-5 19:39
用的第二个批处理
时间格式是 2023-09-05

看不懂就直接用这个吧。默认是这种格式,应该是wim7系统了。
那个BUG我也懒得加码了,太费脑了。直接注册表修改再还原更便捷。
这样就可以解决你的问题了。
goodluck~!
  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. reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "yyyy/MM/dd" >nul
  5. (echo yd=Date(^)-1
  6. echo wscript.echo yd
  7. ) > yd.vbs
  8. for /f %%a in ('cscript yd.vbs') do set yd=%%a
  9. del /q yd.vbs
  10. SET YYD=%yd:/=-%
  11. echo.&echo 即将把%yd%创建的文件全部转移到%YYD%文件夹下。
  12. echo.&pause
  13. set p=c:\sample
  14. md "%p%\%YYD%" >nul 2>nul
  15. FOR /f "tokens=3,*" %%a IN ('dir /a-d /tc %p% ^| FINDSTR /ilc:"%yd%"')  DO move "%p%\%%b" "%p%\%YYD%" >nul
  16. reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "%sshortdate%" >nul
  17. cls&echo.&echo %yd%创建的文件转移完成。
  18. timeout /t 2 >nul
复制代码



作者: szmsys    时间: 2023-9-6 08:14
ppll2030 发表于 2023-9-5 20:45

试了,能生成文件夹,但是没有转移文件。是不是你的注册表项有问题?
作者: ppll2030    时间: 2023-9-6 14:10
szmsys 发表于 2023-9-6 08:14
试了,能生成文件夹,但是没有转移文件。是不是你的注册表项有问题?

你看运行时的的提示。第一个日期是yyyy/mm/dd 就是注册表成功了,还有任务栏右下角也应该是这个格式的,反之就用管理员权限运行。
再看这个日期是昨天的,也就是取值成功了。反之就看看你系统时间对不对吧。
这个只是在第二版基础上添加了注册表修改和还原。
这样不管你原来什么格式的日期,都不影响脚本运行。
作者: szmsys    时间: 2023-9-6 14:34
ppll2030 发表于 2023-9-5 20:45

又测试了,发现 C:\sample 无效,但是 D:\sample 只移动昨天生成的文件,不移动前天及更早生成的文件,真是奇怪。
作者: ppll2030    时间: 2023-9-6 14:49
szmsys 发表于 2023-9-6 14:34
又测试了,发现 C:\sample 无效,但是 D:\sample 只移动昨天生成的文件,不移动前天及更早生成的文件,真 ...

你是不是混乱了。我的脚本没出现过D:\sample
作者: szmsys    时间: 2023-9-6 14:58
ppll2030 发表于 2023-9-6 14:49
你是不是混乱了。我的脚本没出现过D:\sample

我把 set p=c:\sample 改成 set p=d:\sample 测试的
作者: ppll2030    时间: 2023-9-6 15:10
本帖最后由 ppll2030 于 2023-9-6 15:19 编辑
szmsys 发表于 2023-9-6 14:58
我把 set p=c:\sample 改成 set p=d:\sample 测试的
批处理,或vbs,在 C:\sample\ 里面生成一个 以昨天的日期为名称的文件夹,比如,今天是2023年9月4日,则生成一个名称是 2023-09-03 的文件夹,然后,把 C:\sampke 文件夹里 生成日期为 2023-09-03 全部文件移动到这个文件夹里,不是此日期生成的文件,不移动。

你都把路径改了。你还想原路径怎么生效
还有,你自己看看标题和要求。自己把自己都搞混了
脚本里有中文的,
  1. title: 查找和移动前一天创建的文件到前一天命名的文件夹
复制代码
而且,运行脚本时,窗口上方也有提示的



作者: szmsys    时间: 2023-9-6 15:18
ppll2030 发表于 2023-9-6 15:10
你都把路径改了。你还想原路径怎么生效
还有,你自己看看标题和要求。自己把自己都搞混了{:1_1 ...

那我想改路径,怎么办啊?
作者: ppll2030    时间: 2023-9-6 15:21
szmsys 发表于 2023-9-6 15:18
那我想改路径,怎么办啊?

我。。。。。。
你要改就改啊。改了哪个,就对哪个生效啊。
难道你改了,还想对原来的生效???那你改的意义是什么???
作者: nttwqz    时间: 2023-9-6 22:32
batche 发表于 2023-9-5 00:35
有这么简单的批处理算法吗?分享一下,主要是跨月、跨年和日期显示格式的问题,没有日期函数的话,批处理 ...

为了让更多人看多,已单独发帖。

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=437209
作者: nttwqz    时间: 2023-9-6 23:39
我觉得楼主的需求描述把人带到了误区,既然每天运行,都要把所谓昨天日期的文件移动到昨天日期的文件夹里面,那么最终的结果就是除了今天之外,以往都有文件相关日期的文件夹。

所以楼主实际最终结果的需求是:将该文件夹下非今天日期的文件移动到该文件日期的文件夹里面,其实就是文件按日期分类。

于是乎,根本不用计算所谓的昨天日期,只需判断文件日期是否今天,否则就移动到它自己日期的文件夹里面。

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

麻烦给个成品批处理试试,谢谢
作者: ppll2030    时间: 2023-9-7 10:43
nttwqz 发表于 2023-9-6 23:39
我觉得楼主的需求描述把人带到了误区,既然每天运行,都要把所谓昨天日期的文件移动到昨天日期的文件夹里面 ...

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

老大给个成品批处理试试啊
作者: nttwqz    时间: 2023-9-7 22:05
  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
复制代码

作者: nttwqz    时间: 2023-9-7 22:48
说起来,现代操作系统都支持文件分组显示,且支持文件名、文件类型、文件大小、文件修改时间等多种分组方式,所以个人感觉,楼主根本就没有归类的必要,直接分组显示即可。
作者: ppll2030    时间: 2023-9-7 23:40
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%
复制代码

作者: szmsys    时间: 2023-9-8 11:54
ppll2030 发表于 2023-9-7 23:40
吃完饭练练手。试试看吧。

辛苦了,我试试
作者: szmsys    时间: 2023-9-8 12:05
ppll2030 发表于 2023-9-7 23:40
吃完饭练练手。试试看吧。

win7测试失败,麻烦检查一下
作者: szmsys    时间: 2023-9-8 12:17
ppll2030 发表于 2023-9-7 23:40
吃完饭练练手。试试看吧。

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

防止直接回车,和输入错误格式比如后尾带空格等,造成运行失败。
作者: 水泊蓝山    时间: 2023-9-8 16:54
win7 不知道有没有 forfiles 命令

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

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

什么年代了还在用win7啊!
作者: ppll2030    时间: 2023-9-8 17:17
水泊蓝山 发表于 2023-9-8 16:54
win7 不知道有没有 forfiles 命令

还是大佬厉害啊。又学到一招
作者: szmsys    时间: 2023-9-8 19:50
ppll2030 发表于 2023-9-8 17:17
还是大佬厉害啊。又学到一招

只有这一行代码就行?连个文件夹路径都没有
作者: szmsys    时间: 2023-9-8 19:50
水泊蓝山 发表于 2023-9-8 16:54
win7 不知道有没有 forfiles 命令

就这一行代码就行?连个文件夹路径都没有
作者: ppll2030    时间: 2023-9-8 20:37
szmsys 发表于 2023-9-8 19:50
就这一行代码就行?连个文件夹路径都没有

有局限性,不过完成你那个修改日期的需求足够了。前提也是你要修改过日期显示不能出现"/"。不然会出错找不到文件夹路径。
作者: szmsys    时间: 2023-9-8 20:54
ppll2030 发表于 2023-9-8 20:37
有局限性,不过完成你那个修改日期的需求足够了。前提也是你要修改过日期显示不能出现"/"。不然会出错找 ...

算了 还是你的靠谱
作者: ppll2030    时间: 2023-9-8 21:04
szmsys 发表于 2023-9-8 20:54
算了 还是你的靠谱

大佬只是提点。具体需求还是要自己要动手滴。
作者: szmsys    时间: 2023-9-8 21:09
ppll2030 发表于 2023-9-8 21:04
大佬只是提点。具体需求还是要自己要动手滴。

那你根据提点,弄个稳定普适版
作者: helloman    时间: 2023-9-8 21:41
nttwqz 发表于 2023-9-7 22:05

按照修改日期归档到以修改日期命名的文件夹,挺好!
作者: helloman    时间: 2023-9-8 21:42
ppll2030 发表于 2023-9-7 23:40
吃完饭练练手。试试看吧。

去掉6-7行,把指定目录下昨日及以前的创建的文件移动到以昨日为文件名的文件夹,也挺方便的
作者: helloman    时间: 2023-9-8 21:44
跟着楼主蹭批处理整理桌面,挺好!
作者: ppll2030    时间: 2023-9-8 21:54
szmsys 发表于 2023-9-8 21:09
那你根据提点,弄个稳定普适版

我那个就是普适版啊。适用于不同个性设置的机子。
作者: ppll2030    时间: 2023-9-8 21:58
helloman 发表于 2023-9-8 21:42
去掉6-7行,把指定目录下昨日及以前的创建的文件移动到以昨日为文件名的文件夹,也挺方便的

去掉保护,在输入的时候,就要谨慎一点,要有心里准备可能引发不可知的结果。
作者: szmsys    时间: 2023-9-8 23:45
ppll2030 发表于 2023-9-7 23:40
吃完饭练练手。试试看吧。

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

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

那你用上一个把非当天文件转移到昨天文件夹的脚本一起用呗。
先把昨天以前的转移到昨天文件夹,再用这个脚本把里面的文件整理归类就好了。
作者: szmsys    时间: 2023-9-9 06:24
ppll2030 发表于 2023-9-9 00:06
那你用上一个把非当天文件转移到昨天文件夹的脚本一起用呗。
先把昨天以前的转移到昨天文件夹,再用这个 ...

这个可行。只是,需要用任务计划每天定时运行,所以,还得一个批处理才行。因为昨天的文件夹名称每天都在变化。
作者: szmsys    时间: 2023-9-9 07:15
ppll2030 发表于 2023-9-4 10:43
两个关键点,一个昨天日期,一个关键字搜索。
刚好有空,嘚瑟一下。各位大佬轻喷。

大佬,能不能加一个判断句?如果没有符合条件的文件,就不新建文件夹,以免每天运行时,产生大量空文件夹。谢谢
作者: ppll2030    时间: 2023-9-9 10:08
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%
复制代码

作者: ppll2030    时间: 2023-9-9 10:14
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
复制代码

作者: 水泊蓝山    时间: 2023-9-20 15:01
感觉把逻辑搞复杂了,既然是天天都要运行,在每晚23:59 把当天的文件放到今天日期目录下不就好了。。




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3