无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3035|回复: 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 全部文件移动到这个文件夹里,不是此日期生成的文件,不移动。
2#
发表于 2023-9-3 17:47:53 | 只看该作者
在批处理里面使用for取得日期:
  1. for /f %%i in ('date /t') do set dir=%%i
  2. set i=%dir:/=-%
  3. echo %i%
复制代码
再建立一个文件夹,使用move 命令把文件移动到文件夹里就可以了
如果你要写一个程序,可以自己动手先试,哪里有问题再问更好一些

点评

学习了  详情 回复 发表于 2023-9-3 18:50

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 谢谢您!本人菜,麻烦给个成品学习,谢谢!

查看全部评分

回复

使用道具 举报

3#
发表于 2023-9-3 18:04:57 | 只看该作者
这个可以有,谢谢
回复

使用道具 举报

4#
发表于 2023-9-3 18:50:09 | 只看该作者
9zhmke 发表于 2023-9-3 17:47
在批处理里面使用for取得日期:
再建立一个文件夹,使用move 命令把文件移动到文件夹里就可以了
如果你要 ...

学习了
回复

使用道具 举报

5#
发表于 2023-9-3 18:59:15 来自手机 | 只看该作者
批处理计算昨天日期码较长,调用vbs或ps可少码。如果天天运行的话可提前建好明天的文件夹

点评

有高手对算法有研究,昨天日期计算有1行或者几行的,你搜搜就有。  详情 回复 发表于 2023-9-4 09:06
谢谢您!是天天运行。麻烦给个成品,谢谢  详情 回复 发表于 2023-9-3 23:52

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 很给力!

查看全部评分

回复

使用道具 举报

6#
 楼主| 发表于 2023-9-3 23:52:47 | 只看该作者
szwp 发表于 2023-9-3 18:59
批处理计算昨天日期码较长,调用vbs或ps可少码。如果天天运行的话可提前建好明天的文件夹

谢谢您!是天天运行。麻烦给个成品,谢谢

点评

你将今天的写好,昨天也快了。一天运行一次可以取最新文件夹就是昨天的,顺便将明天的文件夹建好  详情 回复 发表于 2023-9-4 07:47
回复

使用道具 举报

7#
发表于 2023-9-4 07:47:55 来自手机 | 只看该作者
szmsys 发表于 2023-9-3 23:52
谢谢您!是天天运行。麻烦给个成品,谢谢

你将今天的写好,昨天也快了。一天运行一次可以取最新文件夹就是昨天的,顺便将明天的文件夹建好

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 麻烦给个成品学习,谢谢

查看全部评分

回复

使用道具 举报

8#
发表于 2023-9-4 09:01:17 | 只看该作者
这是什么工作要求的?
回复

使用道具 举报

9#
发表于 2023-9-4 09:04:55 | 只看该作者
看起来像是备份日志或者文档一类!
回复

使用道具 举报

10#
发表于 2023-9-4 09:06:10 来自手机 | 只看该作者
szwp 发表于 2023-9-3 18:59
批处理计算昨天日期码较长,调用vbs或ps可少码。如果天天运行的话可提前建好明天的文件夹

有高手对算法有研究,昨天日期计算有1行或者几行的,你搜搜就有。

点评

有这么简单的批处理算法吗?分享一下,主要是跨月、跨年和日期显示格式的问题,没有日期函数的话,批处理写起来比较复杂  详情 回复 发表于 2023-9-5 00:35
回复

使用道具 举报

11#
发表于 2023-9-4 10:43:37 | 只看该作者
两个关键点,一个昨天日期,一个关键字搜索。
刚好有空,嘚瑟一下。各位大佬轻喷。
  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
复制代码


点评

大佬,能不能加一个判断句?如果没有符合条件的文件,就不新建文件夹,以免每天运行时,产生大量空文件夹。谢谢  详情 回复 发表于 2023-9-9 07:15
  详情 回复 发表于 2023-9-5 10:16
测试好用!感谢您,高手啊。另外,你这个是根据文件名判断。 能不能做个根据根据文件生成日期来判断的,无视文件名。 谢谢  详情 回复 发表于 2023-9-5 09:31

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 谢谢您,我试试

查看全部评分

回复

使用道具 举报

12#
发表于 2023-9-4 11:54:29 来自手机 | 只看该作者
天天运行的话只要将不是今天的移走

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 很给力!

查看全部评分

回复

使用道具 举报

13#
发表于 2023-9-5 00:35:29 | 只看该作者
nttwqz 发表于 2023-9-4 09:06
有高手对算法有研究,昨天日期计算有1行或者几行的,你搜搜就有。

有这么简单的批处理算法吗?分享一下,主要是跨月、跨年和日期显示格式的问题,没有日期函数的话,批处理写起来比较复杂

点评

为了让更多人看多,已单独发帖。 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=437209  详情 回复 发表于 2023-9-6 22:32
回复

使用道具 举报

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

测试好用!感谢您,高手啊。另外,你这个是根据文件名判断。
能不能做个根据根据文件生成日期来判断的,无视文件名。
谢谢

点评

修改一下查找参数就好啦。  详情 回复 发表于 2023-9-5 15:14
回复

使用道具 举报

15#
 楼主| 发表于 2023-9-5 10:16:42 来自手机 | 只看该作者
回复

使用道具 举报

16#
发表于 2023-9-5 15:14:41 | 只看该作者
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
复制代码

点评

测试了,文件没有被移动,麻烦再改改,谢谢  发表于 2023-9-5 15:37
测试了,文件没有被移动,麻烦再改改,谢谢。是根据文件生成日期,不是修改日期。  发表于 2023-9-5 15:36

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 测试了,文件没有被移动,麻烦再改改,谢谢

查看全部评分

回复

使用道具 举报

17#
发表于 2023-9-5 15:34: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%

点评

试了,无效,谢谢  发表于 2023-9-5 15:39
回复

使用道具 举报

18#
发表于 2023-9-5 15:42:14 | 只看该作者
dir /a-d /tc  参数没错。你看看是不是你看错了。把修改日期看成创建日期了。资源管理器默认显示的修改日期哦。

点评

我把系统日期调到昨天,然后新建的文件,然后再把系统日期改成今天  发表于 2023-9-5 16:05
管理器默认是修改日期,你按图中把创建日期勾上。看看是不是有误。[attachimg]531292[/attachimg]  详情 回复 发表于 2023-9-5 15:50
回复

使用道具 举报

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

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

点评

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

使用道具 举报

20#
发表于 2023-9-5 15:54:54 | 只看该作者
创建时间则改成
for /f "tokens=1,5" %%1 in ('"dir /a-d/tc|Findstr :|findstr /v \"') do call :chk %%2 %%1

点评

批处理放在需要处理的文件夹里,就不需要指定了。  发表于 2023-9-6 16:35
谢谢,试了,不行  发表于 2023-9-5 16:09
回复

使用道具 举报

21#
 楼主| 发表于 2023-9-5 16:05:53 | 只看该作者
ppll2030 发表于 2023-9-5 15:50
管理器默认是修改日期,你按图中把创建日期勾上。看看是不是有误。

不会错的,是创建时间,。我把系统日期调到昨天,然后新建的文件,然后再把系统日期改成今天

点评

知道问题在哪了。 你任务栏右下角的的日期是不是这样的? 2023/9/5 导入这个注册表,把它改成 2023/09/05 的格式就可以了。  详情 回复 发表于 2023-9-5 16:20
回复

使用道具 举报

22#
发表于 2023-9-5 16:20:27 | 只看该作者
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"
复制代码

点评

好用了!您真厉害【表情】高人啊 问题又来了 如果我的系统日期格式是 2023/9/5 或者 2023-9-5 或者 2023-09-05 等,我怎么修改您的批处理文件,才能匹配?谢谢  详情 回复 发表于 2023-9-5 16:25
回复

使用道具 举报

23#
 楼主| 发表于 2023-9-5 16:25:04 | 只看该作者
本帖最后由 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 字样,即使是今天生成的文件,也被移动了,咋回事?

点评

把这一条 reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "yyyy/MM/dd" 放在批处理的第三行,也就是 "title: 查找和移动前一天创建的文件" 这一行的下面即可。 因为cmd  详情 回复 发表于 2023-9-5 16:42
回复

使用道具 举报

24#
发表于 2023-9-5 16:42:08 | 只看该作者
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,
批处理的日期是根据系统获取的,因为两者格式不统一,就出问题了。
最简单的方法就是修改系统默认,做到统一,也方便强迫症看日期时是整齐同宽,而不是一长一短的。

点评

为什么今天生成的含有昨天日期的文件名的文件,还是被移动了?是不是你没去掉根据文件名判断是否移动文件啊?  详情 回复 发表于 2023-9-5 17:56

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 为什么今天生成的含有昨天日期的文件名的文.

查看全部评分

回复

使用道具 举报

25#
 楼主| 发表于 2023-9-5 17:56:04 | 只看该作者
ppll2030 发表于 2023-9-5 16:42
把这一条 reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "yyyy/MM/dd"
...

为什么今天生成的含有昨天日期的文件名的文件,还是被移动了?是不是你没去掉根据文件名判断是否移动文件啊?

点评

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

使用道具 举报

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

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

点评

用的第二个批处理 时间格式是 2023-09-05 即使时间格式是 2023-09-05 为什么把今天生成的含有昨天日期 2023-09-04 的文件名的文件给移动了?为什么?  详情 回复 发表于 2023-9-5 19:39
回复

使用道具 举报

27#
 楼主| 发表于 2023-9-5 19:39:03 | 只看该作者
ppll2030 发表于 2023-9-5 18:10
你是不是用错第一个批处理了
第二个批处理关键字是2023/09/04的格式。这个不可能用作文件名命 ...

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

即使时间格式是 2023-09-05 为什么把今天生成的含有昨天日期 2023-09-04 的文件名的文件给移动了?为什么?

点评

原因上面不是说了吗?关键字日期是从系统取值的,系统默认是哪个,得到的值就是哪个格式。 而cmd下,dir出来的目录,创建日期格式是2023/09/05,所以取值也必须是2023/09/04格式。 这样才能找到符合条件的的文件。  详情 回复 发表于 2023-9-5 20:45
回复

使用道具 举报

28#
发表于 2023-9-5 19:51:37 | 只看该作者
现在发现用python搞这些更方便。学习成本很低,可读性又比批处理强。

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 不懂python

查看全部评分

回复

使用道具 举报

29#
发表于 2023-9-5 20:45:22 | 只看该作者
本帖最后由 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
复制代码


点评

又测试了,发现 C:\sample 无效,但是 D:\sample 只移动昨天生成的文件,不移动前天及更早生成的文件,真是奇怪。  详情 回复 发表于 2023-9-6 14:34
试了,能生成文件夹,但是没有转移文件。是不是你的注册表项有问题?  详情 回复 发表于 2023-9-6 08:14

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 你讲了一大堆,我也不懂。我看看,能用就行.

查看全部评分

回复

使用道具 举报

30#
 楼主| 发表于 2023-9-6 08:14:45 | 只看该作者

试了,能生成文件夹,但是没有转移文件。是不是你的注册表项有问题?

点评

你看运行时的的提示。第一个日期是yyyy/mm/dd 就是注册表成功了,还有任务栏右下角也应该是这个格式的,反之就用管理员权限运行。 再看这个日期是昨天的,也就是取值成功了。反之就看看你系统时间对不对吧。 这个  详情 回复 发表于 2023-9-6 14:10
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-5 02:39

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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