无忧启动论坛

标题: 求助大家写个批处理 [打印本页]

作者: szmsys    时间: 2023-9-5 10:25
标题: 求助大家写个批处理
本帖最后由 szmsys 于 2023-9-7 09:08 编辑

求助大家写个批处理:

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

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

谢谢
作者: martin313    时间: 2023-9-5 10:52

有请 yyz2191958 出马
作者: yyz2191958    时间: 2023-9-5 10:53
martin313 发表于 2023-9-5 10:52
有请 yyz2191958 出马

我不晓得 惭愧
作者: chiannet    时间: 2023-9-5 11:28
@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


作者: shy20070509    时间: 2023-9-5 11:37
chiannet 发表于 2023-9-5 11:28
@echo off
SetLocal EnableDelayedExpansion

⺧人啊
作者: chiannet    时间: 2023-9-5 11:56
本帖最后由 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
复制代码


作者: pengfangzhi    时间: 2023-9-5 11:58
  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写的

作者: pengfangzhi    时间: 2023-9-5 12:00
此脚本会先创建一个以昨天日期命名的文件夹,然后将C:\sample下所有非当天的文件移动到这个新文件夹中。如果该文件已经在新的文件夹中存在,将会被覆盖。如果你不想覆盖已存在的文件,你可以将move命令改为copy命令
作者: helloman    时间: 2023-9-5 12:01
chiannet 发表于 2023-9-5 11:28
@echo off
SetLocal EnableDelayedExpansion

试了下,第一步符合楼主要求,第二步把今天生成的文件移动到该文件夹了,以前的文件没有移动
作者: schdtv    时间: 2023-9-5 12:06
pengfangzhi 发表于 2023-9-5 11:58
以下是一个可以完成你需求的批处理脚本,但请注意批处理脚本在执行时会比较直接,且不提供确认提示,所以请 ...

百度的AI都能干这事儿啦
作者: pengfangzhi    时间: 2023-9-5 12:10
schdtv 发表于 2023-9-5 12:06
百度的AI都能干这事儿啦

自己去试试就知道了,现在开放了,都能用的。
作者: legou    时间: 2023-9-5 12:33
直接让ChatGPT帮你写就好了
作者: martin313    时间: 2023-9-5 12:42
AI 技术,牛逼
作者: 铿锵玫瑰    时间: 2023-9-5 14:02
麻烦楼主,7楼大牛提供的用的效果如何?请反馈,谢谢!
作者: szmsys    时间: 2023-9-5 14:16
chiannet 发表于 2023-9-5 11:56

今天新建的文件,也被移动到文件夹里了,咋回事?
作者: szmsys    时间: 2023-9-5 14:23
chiannet 发表于 2023-9-5 11:56

经测试,今天新建的文件被移动到文件夹,但是昨天前天的文件没有被移动,老大是不是搞反了逻辑?谢谢  发
作者: ppll2030    时间: 2023-9-5 15:19
同样的问题居然又开了个新帖。不怕斑竹关你一天小黑屋啊
我在那边回复你了。
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=437172&pid=5028652&fromuid=767159
作者: chiannet    时间: 2023-9-5 16:11
szmsys 发表于 2023-9-5 14:23
经测试,今天新建的文件被移动到文件夹,但是昨天前天的文件没有被移动,老大是不是搞反了逻辑?谢谢  发

这句

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



改成

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

作者: yc2428    时间: 2023-9-5 16:22
学习一下
作者: ppll2030    时间: 2023-9-5 18:31
一码多用
  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
复制代码

作者: helloman    时间: 2023-9-5 20:39
ppll2030 发表于 2023-9-5 18:31
一码多用

这个好用!
作者: helloman    时间: 2023-9-5 20:41
chiannet 发表于 2023-9-5 16:11
这句

改了后把今天及以前的文件都移动到了新建的文件夹
作者: ppll2030    时间: 2023-9-5 20:49
helloman 发表于 2023-9-5 20:39
这个好用!

好用就留着用哈,虽然我不知道有什么用
作者: 暗影夺魄    时间: 2023-9-5 20:55
不懂,进来看看
作者: helloman    时间: 2023-9-5 21:11
ppll2030 发表于 2023-9-5 20:49
好用就留着用哈,虽然我不知道有什么用

我主要是收拾电脑桌面用,所以把目录改了用挺好。不知道楼主是干啥用
作者: szmsys    时间: 2023-9-5 21:38
edison_2008 发表于 2023-9-5 15:55
chatGPT写的

这个是不是那个帖子所有修改的最终版?
作者: szmsys    时间: 2023-9-5 21:39
helloman 发表于 2023-9-5 21:11
我主要是收拾电脑桌面用,所以把目录改了用挺好。不知道楼主是干啥用

我也是
作者: xxxyyy1    时间: 2023-9-5 22:33
为啥不问问gpt
作者: dvs909    时间: 2023-9-5 23:49
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('移动操作完成。')
作者: chiannet    时间: 2023-9-6 00:38
本帖最后由 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




复制代码

作者: helloman    时间: 2023-9-6 07:43
chiannet 发表于 2023-9-6 00:38

谢谢,这个可以了!
作者: stupid2020    时间: 2023-9-6 08:05
我一看,全是用GPT写的。。你自己找GPT,然后慢慢测试。。
作者: szmsys    时间: 2023-9-6 08:39
本帖最后由 szmsys 于 2023-9-6 08:48 编辑
ppll2030 发表于 2023-9-5 18:31
一码多用

问题:今天的不移动,昨天的不移动,前天的移动
生成的文件夹名称是昨天,但是它只移动前天之前的文件。比如今天是2023/9/6,它只移动2023/9/4及之前的文件,2323/9/5号的文件不移动,咋回事?


作者: 此生有求    时间: 2023-9-6 09:12
AI真的让这些便利啦
作者: szmsys    时间: 2023-9-6 10:34
chiannet 发表于 2023-9-6 00:38


前天及之前生成的文件移动了,但是昨天生成的文件没有移动
作者: chiannet    时间: 2023-9-6 12:54
szmsys 发表于 2023-9-6 10:34
前天及之前生成的文件移动了,但是昨天生成的文件没有移动

我测试没问题,31楼是测试"D:\sample",用的时候试着改为“C:\sample”。
作者: szmsys    时间: 2023-9-6 13:24
本帖最后由 szmsys 于 2023-9-6 14:30 编辑
chiannet 发表于 2023-9-6 12:54
我测试没问题,31楼是测试"D:\sample",用的时候试着改为“C:\sample”。

谢谢,已经改成 c:\sample。发现 C:\sample 无效,但是 D:\sample 成功,真是奇怪。
作者: ppll2030    时间: 2023-9-6 14:17
szmsys 发表于 2023-9-6 08:39
问题:今天的不移动,昨天的不移动,前天的移动
生成的文件夹名称是昨天,但是它只移动前天之前的文件。 ...

看运行时的提示,第一个时间是今天,第二个时间是昨天。就对了。反之检查你的系统时间吧。
这个依然是根据创建时间排查的。转移文件部分没问题。只要时间对的上就行。
作者: chiannet    时间: 2023-9-6 14:59
本帖最后由 chiannet 于 2023-9-7 09:08 编辑
szmsys 发表于 2023-9-6 13:24
谢谢,已经改成 c:\sample。发现 C:\sample 无效,但是 D:\sample 成功,真是奇怪。

检查一下 C:\sample 权限,是否设置了访问权限?
代码再捶打一下:

复制代码



作者: szmsys    时间: 2023-9-6 15:07
chiannet 发表于 2023-9-6 14:59
检查一下 C:\sample 权限,是否设置了访问权限?
代码再捶打一下:

权限没问题,因为运行您的批处理后,里面出现了新生成的文件夹,只是文件没有被移动。

捶打的代码,连 D 盘都无效了,还不如原来的
作者: szmsys    时间: 2023-9-6 15:21
本帖最后由 szmsys 于 2023-9-6 15:29 编辑
ppll2030 发表于 2023-9-5 18:31
一码多用

路径默认 c:\sample 我在命令行最后加了 pause 出现如图提示:

另外,我想改目录,怎么办啊?谢谢

捕获.JPG (33.09 KB, 下载次数: 183)

捕获.JPG

捕获.JPG (42.88 KB, 下载次数: 207)

捕获.JPG

作者: ppll2030    时间: 2023-9-6 15:30
szmsys 发表于 2023-9-6 15:21
路径默认 c:\sample 我在命令行最后加了 pause 出现如图提示:

另外,我想改目录,怎么办啊?谢谢

你直接复制新的路径过来就行了。
这个set 就是为了方便你更换路径的。其他不需要动。
手动改,注意要用英文冒号,中文冒号就会出错。
作者: szmsys    时间: 2023-9-6 15:33
ppll2030 发表于 2023-9-6 15:30
你直接复制新的路径过来就行了。
这个set 就是为了方便你更换路径的。其他不需要动。
手动改,注意要用 ...

我没改动,为什么提示:系统找不到指定的文件
作者: ppll2030    时间: 2023-9-6 15:41
szmsys 发表于 2023-9-6 15:33
我没改动,为什么提示:系统找不到指定的文件

你没改是不会出现提示的。

因为我已经把这些提示默认都隐藏了。

把这乱改的删了吧。重新复制脚本再保存一个新的吧
作者: szmsys    时间: 2023-9-6 15:57
ppll2030 发表于 2023-9-6 15:41
你没改是不会出现提示的。

因为我已经把这些提示默认都隐藏了。

系统找不到指定文件,啥意思?是不是批处理执行的命令找不到?
作者: szwp    时间: 2023-9-6 15:58
szmsys 发表于 2023-9-6 15:21
路径默认 c:\sample 我在命令行最后加了 pause 出现如图提示:

另外,我想改目录,怎么办啊?谢谢

有没感觉\前面空得多了。
作者: ppll2030    时间: 2023-9-6 16:07
szmsys 发表于 2023-9-6 15:57
系统找不到指定文件,啥意思?是不是批处理执行的命令找不到?

我的脚本不会有这个提示。你要不是乱改,就不是我的脚本。
那我也不知道哪里的问题。
作者: helloman    时间: 2023-9-6 16:49
目前chiannet和ppll2030两位的批处理都使用正常,怎么修改可以同时移动今日以前创建的文件和文件夹?
作者: helloman    时间: 2023-9-6 17:01
szmsys 发表于 2023-9-6 15:07
权限没问题,因为运行您的批处理后,里面出现了新生成的文件夹,只是文件没有被移动。

捶打的代码,连 ...

看了下,应该是文件创建日期问题,我把以前创建的文件移动到d:\sample下,执行这个批处理,创建了以昨天日期命名的新文件夹,但没有移动文件

作者: ppll2030    时间: 2023-9-6 17:12
本帖最后由 ppll2030 于 2023-9-7 23:55 编辑
szmsys 发表于 2023-9-6 15:57
系统找不到指定文件,啥意思?是不是批处理执行的命令找不到?

OK。是我忽略了。sorry!
找了一台win7试了一下。出现你的这些问题了。还有一个时间的显示问题
下面的是WIN7-10通用。已测试。
之前的原因主要是7和10对于日期和时间的默认显示格式不同造成了。
现在用注册表的办法统一的显示格式,以下的脚本就通用了。
脚本含有注册表备份和还原功能,所以不同的显示格式在运行脚本后都还原,不做永久修改。
还有:set p=c:\sample 这条,你可以自由修改后面的路径,d:\sample 或 e:\xxxx\sample  注意用英文的冒号。


2023-09-07 PS:  如果使用 “上午 9:10” 这种格式显示时间,可能出现恢复错误。现已修正。
  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. (echo yd=Date(^)-1
  8. echo wscript.echo yd
  9. ) > yd.vbs
  10. for /f %%a in ('cscript yd.vbs') do set yd=%%a
  11. del /q yd.vbs
  12. SET YYD=%yd:/=-%
  13. echo.&echo 即将把%date%以前(不含当日)创建的文件全部转移到%YYD%文件夹下。
  14. echo.&pause

  15. set p=c:\sample
  16. md "%p%\%YYD%" >nul 2>nul
  17. FOR /f "tokens=3,*" %%a IN ('dir /a-d /tc %p% ^| FINDSTR /ilvc:"%date%"')  DO move "%p%\%%b" "%p%\%YYD%" >nul 2>nul

  18. reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "%sShortDate%" >nul
  19. reg add "HKCU\Control Panel\International" /f /v "sTimeFormat" /t REG_SZ /d "%sTimeFormat%" >nul
  20. cls&echo.&echo %date%以前创建的文件转移完成。
  21. timeout /t 2 >nul
复制代码







作者: chiannet    时间: 2023-9-6 17:15
helloman 发表于 2023-9-6 17:01
看了下,应该是文件创建日期问题,我把以前创建的文件移动到d:\sample下,执行这个批处理,创建了以昨天 ...

只搬动“创建日期”符合“非今日”的文件,并不理会“修改日期”为非今日文件。

但Windows 资源浏览器通常只显示“修改日期”。
作者: chiannet    时间: 2023-9-6 17:19
szmsys 发表于 2023-9-6 15:07
权限没问题,因为运行您的批处理后,里面出现了新生成的文件夹,只是文件没有被移动。

捶打的代码,连 ...

冒号要英文的哦,从截图看,你的“c:”是中文冒号,应该是"c:"
作者: szmsys    时间: 2023-9-6 17:57
chiannet 发表于 2023-9-6 17:19
冒号要英文的哦,从截图看,你的“c:”是中文冒号,应该是"c:"

我只是回帖用的不对。批处理是英文的。可以确定,你呢的修改版只能生成文件夹,无法移动文件。我是win7 64位系统,您可以测试一下
作者: szmsys    时间: 2023-9-6 17:58
ppll2030 发表于 2023-9-6 17:12
OK。是我忽略了。sorry!
找了一台win7试了一下。出现你的这些问题了。还有一个时间的显示问题
...

辛苦了!我明天再试试
作者: chiannet    时间: 2023-9-6 22:12
本帖最后由 chiannet 于 2023-9-7 00:12 编辑
szmsys 发表于 2023-9-6 17:58
辛苦了!我明天再试试

去掉所有外部命令,只使用cmd内部命令,在32位03PE及64位 Win 7系统及64位Win 10系统下测试通过。
  1. @Echo Off
  2. Setlocal Enabledelayedexpansion

  3. Set "WokDir=f:\Sample"

  4. For /f "Tokens=1-3 Delims=/ " %%I In ('Echo %Date:-=/%') Do (
  5.         Set MC=0%%J
  6.         Set DC=0%%K
  7.         Call :DateDiff %%I-%%J-%%K -1 T
  8.         Md "%WokDir%"
  9.         Set T="%WokDir%\!T!"
  10.         Md !T!
  11.         If Not Exist !T! Echo 目录创建失败!&Goto :End
  12.         For /f "Delims=" %%i in ('Dir "%WokDir%" /A:-D /T:C') Do Call :Action "%%i" "%~0" "%%I/!MC:~-2!/!DC:~-2!" "!T!"
  13. ) 2>nul


  14. :End
  15. Pause
  16. Exit


  17. :Action
  18.         Set "X=%~1"
  19.         Set Fx="%WokDir%\!X:%X:~0,36%=!"
  20.         If /i %Fx%==%2 Goto :Eof
  21.         If Not "%X:~4,1%"=="/" (If "%X:~4,1%"=="-" (Set "X=%X:~0,4%/%X:~5,2%/!X:%X:~0,8%=!") Else (Goto :Eof))
  22.         If Not "%X:~0,10%"==%3 Move /Y %Fx% %4       
  23. Goto :Eof


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



作者: dvs909    时间: 2023-9-6 23:06
dvs909 发表于 2023-9-5 23:49
import os
import shutil
from datetime import datetime, timedelta

Python
作者: chiannet    时间: 2023-9-7 06:54
本帖最后由 chiannet 于 2023-9-7 09:07 编辑

复制代码

作者: ylac    时间: 2023-9-7 07:40
学习了,谢谢分享
作者: chiannet    时间: 2023-9-7 09:06
  1. @Echo Off
  2. Setlocal Enabledelayedexpansion

  3. Set "WokDir=d:\Sample"

  4. Call :DateDiff "%Date%" -1 DT
  5. Set NP="%WokDir%\%DT%"
  6. (Md "%WokDir%"
  7. Md %NP%) 2>NUL
  8. If Not Exist %NP% Echo 目录创建失败!&Goto :End
  9. For /f "Delims=" %%i in ('Dir "%WokDir%" /A:-D /T:C') Do Call :Action "%%i" "%~0"



  10. :End
  11. Pause
  12. Exit


  13. :Action
  14.         Set "X=%~1"
  15.         Set Fx="%WokDir%\!X:%X:~0,36%=!"
  16.         If /i Not %Fx%==%2 (
  17.                 Set FC=%X:~0,10%
  18.                 Set FC=!FC:-=/!
  19.         Set DN=%Date:~0,10%
  20.                 If "!FC:~4,1!"=="/" If Not "!FC!"=="!DN:-=/!" Move /Y %Fx% %NP%
  21.         )
  22. Goto :Eof


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



作者: szmsys    时间: 2023-9-7 09:06
chiannet 发表于 2023-9-6 22:12
去掉所有外部命令,只使用cmd内部命令,在32位03PE及64位 Win 7系统及64位Win 10系统下测试通过。

终于好用了!谢谢您!
作者: szmsys    时间: 2023-9-7 09:07
ppll2030 发表于 2023-9-6 17:12
OK。是我忽略了。sorry!
找了一台win7试了一下。出现你的这些问题了。还有一个时间的显示问题
...

终于好用了!谢谢您!
作者: ppll2030    时间: 2023-9-7 23:59
szmsys 发表于 2023-9-7 09:07
终于好用了!谢谢您!

如果你的机器使用 “上午 9:15” 这样的时间格式,脚本有可能出现恢复错误。
请手动改回时间显示后,重新下载脚本再用吧。已在原楼层作了修改。
http://bbs.wuyou.net/forum.php?m ... &fromuid=767159
作者: szmsys    时间: 2023-9-8 11:52
ppll2030 发表于 2023-9-7 23:59
如果你的机器使用 “上午 9:15” 这样的时间格式,脚本有可能出现恢复错误。
请手动改回时间显示后,重 ...

谢谢老大!这个是根据文件生成日期,能不能再弄个根据文件修改日期的,谢谢
作者: martin313    时间: 2023-9-8 12:02
路过,学习了
作者: ppll2030    时间: 2023-9-8 14:16
szmsys 发表于 2023-9-8 11:52
谢谢老大!这个是根据文件生成日期,能不能再弄个根据文件修改日期的,谢谢

把19行的查询参数改一下即可    找到 dir /a-d /tc %p%  ,把/tc删除即可。
作者: szmsys    时间: 2023-9-9 15:10
ppll2030 发表于 2023-9-6 17:12
OK。是我忽略了。sorry!
找了一台win7试了一下。出现你的这些问题了。还有一个时间的显示问题
...

老大好,能否再辛苦一下,把这个也弄成:如果没有符合条件的文件,就不生成文件夹?谢谢
作者: ppll2030    时间: 2023-9-9 15:42
本帖最后由 ppll2030 于 2023-9-9 17:56 编辑
szmsys 发表于 2023-9-9 15:10
老大好,能否再辛苦一下,把这个也弄成:如果没有符合条件的文件,就不生成文件夹?谢谢

已修正,无文件转移就不生成文件夹
  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. (echo yd=Date(^)-1
  8. echo wscript.echo yd
  9. ) > yd.vbs
  10. for /f %%a in ('cscript yd.vbs') do set yd=%%a
  11. del /q yd.vbs
  12. SET YYD=%yd:/=-%
  13. echo.&echo 即将把%date%以前(不含当日)创建的文件全部转移到%YYD%文件夹下。
  14. echo.&pause

  15. set p=c:\sample
  16. FOR /f "tokens=3,*" %%a IN ('dir /a-d /tc %p% ^| findstr /ilc:"/" ^| FINDSTR /ilvc:"%date%"')  DO (
  17.         if not exist %p%\%YYD% md %p%\%YYD%
  18.         move "%p%\%%b" "%p%\%YYD%") >nul 2>nul
  19.         
  20. reg add "HKCU\Control Panel\International" /f /v "sShortDate" /t REG_SZ /d "%sShortDate%" >nul
  21. reg add "HKCU\Control Panel\International" /f /v "sTimeFormat" /t REG_SZ /d "%sTimeFormat%" >nul
  22. cls&echo.&echo %date%以前创建的文件转移完成。
  23. timeout /t 2 >nul
复制代码


作者: szmsys    时间: 2023-9-9 17:25
ppll2030 发表于 2023-9-9 15:42

辛苦老大。测试了,没有文件时,还是会新建一个文件夹。麻烦再看看,咋回事?谢谢
作者: szmsys    时间: 2023-9-9 17:47
ppll2030 发表于 2023-9-9 15:42

删了第18行,没效果。依然生成空文件夹。另一个您改的批处理就成功了。
作者: ppll2030    时间: 2023-9-9 17:52
szmsys 发表于 2023-9-9 17:47
删了第18行,没效果。依然生成空文件夹。另一个您改的批处理就成功了。

可以了。在原楼层改了。
作者: szmsys    时间: 2023-9-9 18:34
ppll2030 发表于 2023-9-9 15:42
已修正,无文件转移就不生成文件夹

发现一个现象:将系统时间调到明天,新建一个文件,再将系统时间调回到今天,运行批处理,生成名称是昨天日期的文件夹,明天生成的文件被移动进去了。
作者: ppll2030    时间: 2023-9-9 18:56
szmsys 发表于 2023-9-9 18:34
发现一个现象:将系统时间调到明天,新建一个文件,再将系统时间调回到今天,运行批处理,生成名称是昨天 ...

正常情况系统没这么干吧。除了人为使坏。
脚本名就叫非当天。。。到前一天。。。。你自己细品。




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