无忧启动论坛

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

[已解决] 求助大家写个批处理

  [复制链接]
跳转到指定楼层
1#
发表于 2023-9-5 10:25:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 szmsys 于 2023-9-7 09:08 编辑

求助大家写个批处理:

第一步:
在 C:\sample 下 生成一个以昨天的日期命名的文件夹:YYYY-MM-DD

第二步:
把 C:\sample 下 生成日期不是今天的文件,全部移动到这个新建文件夹里

谢谢
2#
发表于 2023-9-5 10:52:14 | 只看该作者

有请 yyz2191958 出马
回复

使用道具 举报

3#
发表于 2023-9-5 10:53:57 | 只看该作者
martin313 发表于 2023-9-5 10:52
有请 yyz2191958 出马

我不晓得 惭愧
回复

使用道具 举报

4#
发表于 2023-9-5 11:28:20 | 只看该作者
@echo off
SetLocal EnableDelayedExpansion

For /f "Tokens=1-3 Delims=/ " %%i In ('Echo %date%') Do (
        Set "dateT=%%i/%%j/%%k"
        Call :DateDiff %%i-%%j-%%k -1 YesT
        md C:\sample
        md C:\sample\!YesT!
)
for /f "Skip=1 Tokens=1,4* Delims= " %%i in ('dir "C:\sample\*.*" /A:-D /T:C^|Find /i ":"') do (
        if "%%i"=="%dateT%" (if "%%k"=="" (Set "F=%%j") else (Set "F=%%j %%k")
        move  /Y "C:\sample\!F!" C:\sample\%YesT%
))
pause
exit



:DateDiff
        Setlocal
        For /f "Tokens=1-3 Delims=/-:\, " %%a In ('Echo /%~1') Do Set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%100
        Set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,i=153*m+2
        Set /a i=i/5+dd+y*365+y/4-y/100+y/400-2472633+%~2
        Set /a a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
        Set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
        Set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
        Set mm=0%mm%
        Set dd=0%dd%
        Endlocal &Set %3=%yy%-%mm:~-2%-%dd:~-2%
Goto :Eof

回复

使用道具 举报

5#
发表于 2023-9-5 11:37:34 | 只看该作者
chiannet 发表于 2023-9-5 11:28
@echo off
SetLocal EnableDelayedExpansion

⺧人啊
回复

使用道具 举报

6#
发表于 2023-9-5 11:56:10 | 只看该作者
本帖最后由 chiannet 于 2023-9-5 11:58 编辑
  1. @echo off
  2. SetLocal EnableDelayedExpansion

  3. For /f "Tokens=1-3 Delims=/ " %%i In ('Echo %date%') Do (
  4.         SET B=0%%j&SET C=0%%k
  5.         Set "dateT=%%i/!B:~-2!/!C:~-2!"
  6.         Call :DateDiff %%i-%%j-%%k -1 YesT
  7.          md C:\sample 2>nul
  8.          md C:\sample\!YesT! 2>nul
  9. )

  10. if exist C:\sample\%YesT% (
  11.         for /f "Skip=1 Tokens=1,4* Delims= " %%i in ('dir "C:\sample\*.*" /A:-D /T:C^|Find /i ":"') Do (
  12.                 for /f "Tokens=1-3 Delims=/" %%A in ('echo %%i') Do (
  13.                         SET B=0%%B&SET C=0%%C
  14.                         if "%%A/!B:~-2!/!C:~-2!"=="%dateT%" (
  15.                                 if "%%k"=="" (Set "F=%%j") else (Set "F=%%j %%k")
  16.                                 move  /Y "C:\sample\!F!" C:\sample\%YesT%
  17. ))))
  18. pause
  19. exit



  20. :DateDiff
  21.         Setlocal
  22.         For /f "Tokens=1-3 Delims=/-:\, " %%a In ('Echo /%~1') Do Set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%100
  23.         Set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,i=153*m+2
  24.         Set /a i=i/5+dd+y*365+y/4-y/100+y/400-2472633+%~2
  25.         Set /a a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  26.         Set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
  27.         Set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  28.         Set mm=0%mm%
  29.         Set dd=0%dd%
  30.         Endlocal &Set %3=%yy%-%mm:~-2%-%dd:~-2%
  31. Goto :Eof
复制代码

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 谢谢您!第二步是干嘛用的啊?

查看全部评分

回复

使用道具 举报

7#
发表于 2023-9-5 11:58:03 | 只看该作者
  1. @echo off  
  2. setlocal  
  3.   
  4. REM 第一步:创建以昨天日期命名的文件夹  
  5. set "yyyy=%date:~-4%"  
  6. set "mm=%date:~3,2%"  
  7. set "dd=%date:~6,2%"  
  8. set "HH=%time:~0,2%"  
  9. set "MM=%time:~3,2%"  
  10. set "ss=%time:~6,2%"  
  11. set "datetime=%yyyy%%mm%%dd%_%HH%%MM%%ss%"  
  12. set "folder=C:\sample\%datetime%"  
  13. mkdir "%folder%"  
  14.   
  15. REM 第二步:移动非当天文件到新文件夹  
  16. for /f %%A in ('dir /b /a-d "C:\sample*"') do (  
  17.     if !datetime! neq %%~tA (  
  18.         move "%%A" "%folder%"  
  19.     )  
  20. )  
  21.   
  22. endlocal
复制代码
以下是一个可以完成你需求的批处理脚本,但请注意批处理脚本在执行时会比较直接,且不提供确认提示,所以请在执行前确保已经备份了重要数据。百度的AI写的
回复

使用道具 举报

8#
发表于 2023-9-5 12:00:48 | 只看该作者
此脚本会先创建一个以昨天日期命名的文件夹,然后将C:\sample下所有非当天的文件移动到这个新文件夹中。如果该文件已经在新的文件夹中存在,将会被覆盖。如果你不想覆盖已存在的文件,你可以将move命令改为copy命令
回复

使用道具 举报

9#
发表于 2023-9-5 12:01:00 | 只看该作者
chiannet 发表于 2023-9-5 11:28
@echo off
SetLocal EnableDelayedExpansion

试了下,第一步符合楼主要求,第二步把今天生成的文件移动到该文件夹了,以前的文件没有移动
回复

使用道具 举报

10#
发表于 2023-9-5 12:06:45 | 只看该作者
pengfangzhi 发表于 2023-9-5 11:58
以下是一个可以完成你需求的批处理脚本,但请注意批处理脚本在执行时会比较直接,且不提供确认提示,所以请 ...

百度的AI都能干这事儿啦
回复

使用道具 举报

11#
发表于 2023-9-5 12:10:32 | 只看该作者
schdtv 发表于 2023-9-5 12:06
百度的AI都能干这事儿啦

自己去试试就知道了,现在开放了,都能用的。
回复

使用道具 举报

12#
发表于 2023-9-5 12:33:57 | 只看该作者
直接让ChatGPT帮你写就好了
回复

使用道具 举报

13#
发表于 2023-9-5 12:42:52 | 只看该作者
AI 技术,牛逼
回复

使用道具 举报

14#
发表于 2023-9-5 14:02:12 | 只看该作者
麻烦楼主,7楼大牛提供的用的效果如何?请反馈,谢谢!
回复

使用道具 举报

15#
 楼主| 发表于 2023-9-5 14:16:52 | 只看该作者

今天新建的文件,也被移动到文件夹里了,咋回事?
回复

使用道具 举报

16#
 楼主| 发表于 2023-9-5 14:23:04 | 只看该作者

经测试,今天新建的文件被移动到文件夹,但是昨天前天的文件没有被移动,老大是不是搞反了逻辑?谢谢  发
回复

使用道具 举报

17#
发表于 2023-9-5 15:19:20 | 只看该作者
同样的问题居然又开了个新帖。不怕斑竹关你一天小黑屋啊
我在那边回复你了。
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=437172&pid=5028652&fromuid=767159
回复

使用道具 举报

18#
发表于 2023-9-5 16:11:50 | 只看该作者
szmsys 发表于 2023-9-5 14:23
经测试,今天新建的文件被移动到文件夹,但是昨天前天的文件没有被移动,老大是不是搞反了逻辑?谢谢  发

这句

  1. if "%%A/!B:~-2!/!C:~-2!"=="%dateT%" (
复制代码



改成

  1. if not "%%A/!B:~-2!/!C:~-2!"=="%dateT%" (
复制代码
回复

使用道具 举报

19#
发表于 2023-9-5 16:22:43 | 只看该作者
学习一下
回复

使用道具 举报

20#
发表于 2023-9-5 18:31:57 | 只看该作者
一码多用
  1. @echo off
  2. title: 查找和移动非当天创建的文件
  3. rem 修改系统日期格式为yyyy/mm/dd,与cmd统一格式,方便下面关键字查询
  4. reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "yyyy/MM/dd"
  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 即将把%date%以前(不含当日)创建的文件全部转移到%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 /ilvc:"%date%"')  DO move "%p%\%%b" "%p%\%YYD%" >nul
  16. cls&echo.&echo %date%以前创建的文件转移完成。
  17. timeout /t 2 >nul
复制代码

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 问题:今天的不移动,昨天的不移动,前天的.

查看全部评分

回复

使用道具 举报

21#
发表于 2023-9-5 20:39:44 | 只看该作者

这个好用!
回复

使用道具 举报

22#
发表于 2023-9-5 20:41:14 | 只看该作者

改了后把今天及以前的文件都移动到了新建的文件夹
回复

使用道具 举报

23#
发表于 2023-9-5 20:49:29 | 只看该作者

好用就留着用哈,虽然我不知道有什么用
回复

使用道具 举报

24#
发表于 2023-9-5 20:55:31 | 只看该作者
不懂,进来看看
回复

使用道具 举报

25#
发表于 2023-9-5 21:11:48 | 只看该作者
ppll2030 发表于 2023-9-5 20:49
好用就留着用哈,虽然我不知道有什么用

我主要是收拾电脑桌面用,所以把目录改了用挺好。不知道楼主是干啥用
回复

使用道具 举报

26#
 楼主| 发表于 2023-9-5 21:38:25 | 只看该作者

这个是不是那个帖子所有修改的最终版?
回复

使用道具 举报

27#
 楼主| 发表于 2023-9-5 21:39:01 | 只看该作者
helloman 发表于 2023-9-5 21:11
我主要是收拾电脑桌面用,所以把目录改了用挺好。不知道楼主是干啥用

我也是
回复

使用道具 举报

28#
发表于 2023-9-5 22:33:23 | 只看该作者
为啥不问问gpt
回复

使用道具 举报

29#
发表于 2023-9-5 23:49:08 | 只看该作者
import os
import shutil
from datetime import datetime, timedelta

# 获取昨天的日期
yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')

# 构建新文件夹的路径
new_folder_path = os.path.join('C:\\sample', yesterday)

# 创建新文件夹
if not os.path.exists(new_folder_path):
    os.mkdir(new_folder_path)
    print(f'已创建文件夹: {new_folder_path}')

# 遍历C:\sample下的文件和文件夹
for root, dirs, files in os.walk('C:\\sample'):
    for file in files:
        file_path = os.path.join(root, file)
        # 获取文件的最后修改日期
        file_modified_date = datetime.fromtimestamp(os.path.getmtime(file_path)).strftime('%Y-%m-%d')
        # 如果文件的日期不是今天,将其移动到新文件夹
        if file_modified_date != yesterday:
            try:
                shutil.move(file_path, os.path.join(new_folder_path, file))
                print(f'已移动文件: {file_path} 到 {new_folder_path}')
            except Exception as e:
                print(f'移动文件时出错: {str(e)}')

print('移动操作完成。')

评分

参与人数 1无忧币 +5 收起 理由
szmsys + 5 这个怎么用?谢谢

查看全部评分

回复

使用道具 举报

30#
发表于 2023-9-6 00:38:26 | 只看该作者
本帖最后由 chiannet 于 2023-9-6 00:41 编辑
helloman 发表于 2023-9-5 20:41
改了后把今天及以前的文件都移动到了新建的文件夹
  1. @Echo Off
  2. Setlocal Enabledelayedexpansion

  3. For /f "Tokens=1-3 Delims=/ " %%I In ('Echo %date%') Do (
  4.                 Set MC=0%%J
  5.                 Set DC=0%%K
  6.                 Call :DateDiff %%I-%%J-%%K -1 YesT
  7.                 Md D:\sample
  8.                 Md D:\sample\!YesT!
  9.                For /f "Skip=1 Tokens=1-3 Delims=/" %%i in ('Dir D:\sample /A:-D /T:C^|Find /i ":"') Do (
  10.                                Call :GetFN "%%k" F D
  11.                                If %%i%%j!D! NEQ %%I!MC:~-2!!DC:~-2! Move /Y "D:\sample\!F!" D:\sample\!YesT!
  12. )) 2>nul
  13. Pause
  14. Exit


  15. :GetFN
  16.         Set "X=%~1"
  17.         Set "Y=%X:~0,28%"
  18.         Set "%~2=!X:%Y%=!"
  19.         Set "%~3=%X:~0,2%"
  20. Goto :Eof


  21. :DateDiff
  22.         Setlocal
  23.         For /f "Tokens=1-3 Delims=/-:\, " %%a In ('Echo /%~1') Do Set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%100
  24.         Set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,i=153*m+2
  25.         Set /a i=i/5+dd+y*365+y/4-y/100+y/400-2472633+%~2
  26.         Set /a a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  27.         Set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
  28.         Set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  29.         Set mm=0%mm%
  30.         Set dd=0%dd%
  31.         Endlocal &Set %3=%yy%-%mm:~-2%-%dd:~-2%
  32. Goto :Eof




复制代码
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-7-19 21:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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