标题: [日期时间] 删除10天之前的文件,如何更改日期格式为M/d/yyyy [打印本页]
作者: sinun 时间: 2014-12-4 12:45 标题: 删除10天之前的文件,如何更改日期格式为M/d/yyyy
请教各位大虾!下面是删除10天之前文件的代码,如何把日期格式yyyy-M-d成功更改为M/d/yyyy,谢谢!- @echo off
- set FilePath=C:\test\
- set DaysAgo=10
-
- reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f
- call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
- set /a PassDays-=%DaysAgo%
- call :DaysToDate %PassDays% DstYear DstMonth DstDay
- set DstDate=%DstYear%-%DstMonth%-%DstDay%
-
- for /r "%FilePath%" %%a in (*.*) do (if "%%~ta" leq "%DstDate%" (if exist "%%a" (del /a /f /s /q "%%a")))
-
- :DateToDays %yy% %mm% %dd% days
- setlocal ENABLEEXTENSIONS
- set yy=%1&set mm=%2&set dd=%3
- if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
- set /a dd=100%dd%%%100,mm=100%mm%%%100
- set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
- set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
- endlocal&set %4=%j%&goto :eof
-
- :DaysToDate %days% yy mm dd
- setlocal ENABLEEXTENSIONS
- set /a a=%1+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
- (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
- endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :eof
复制代码
作者: DAIC 时间: 2014-12-4 12:57
把日期格式yyyy-M-d成功更改为M/d/yyyy
这样做的目的是什么
作者: sinun 时间: 2014-12-4 14:51
回复 2# DAIC
目的是我这儿有的电脑不支持中文,英文倒每台机都已默认安装,M/d/yyyy是英文格式,能否在不安装中文的前提下,更改为M/d/yyyy实现同样的删除文件的功能。
作者: apang 时间: 2014-12-4 14:58
本帖最后由 apang 于 2014-12-4 15:42 编辑
第9行:- set "DstDate=%DstMonth%/%DstDay%/%DstYear%"
复制代码
第6行:- call :DateToDays %date:~6,4% %date:~0,2% %date:~3,2% PassDays
复制代码
第5行: yyyy-M-d 改成 M/d/yyyy
------------------------------------------------------------------------
卧槽,又弄错了- @echo off
- set FilePath=D:\test\
- set DaysAgo=10
-
- reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /d "M/d/yyyy" /f
- call :DateToDays %date:~6,4% %date:~0,2% %date:~3,2% PassDays
- set /a PassDays-=%DaysAgo%
- call :DaysToDate %PassDays% DstYear DstMonth DstDay
- set "DstDate=%DstYear%-%DstMonth%-%DstDay%"
-
- for /r "%FilePath%" %%a in (*) do (
- for /f "tokens=1-3 delims=/ " %%i in ("%%~ta") do (
- if "%%k-%%i-%%j" leq "%DstDate%" if exist "%%a" del /a /f /s /q "%%a"
- )
- )
- pause
-
- :DateToDays %yy% %mm% %dd% days
- setlocal ENABLEEXTENSIONS
- set yy=%1&set mm=%2&set dd=%3
- if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
- set /a dd=100%dd%%%100,mm=100%mm%%%100
- set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
- set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
- endlocal&set %4=%j%&goto :eof
-
- :DaysToDate %days% yy mm dd
- setlocal ENABLEEXTENSIONS
- set /a a=%1+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
- (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
- endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :eof
复制代码
作者: DAIC 时间: 2014-12-4 20:01
回复 3# sinun
日期的格式和是否安装中文没有什么关系吧
作者: apang 时间: 2014-12-5 20:42
本帖最后由 apang 于 2014-12-5 20:48 编辑
来个vbs,不用动注册表,不过隐藏文件删不掉- Dim strFolder, intAgo, objWMI, objDate, strDate
- ''目标文件夹路径
- strFolder = "D:\Test"
- ''10天之前
- intAgo = 10
-
- Set objDate = CreateObject("WbemScripting.SWbemDateTime")
- objDate.SetVarDate Now-intAgo, true
- strDate = Left(objDate.Value, 8)
- Set objDate = Nothing
- Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
-
- call EnumFiles(strFolder)
- Set objWMI = Nothing
- Set colFolders = Nothing
- Set colFiles = Nothing
- MsgBox "OK"
-
- Sub EnumFiles(strFolder)
- Dim strDrv, strPath, colFiles, objFile, colFolders, objFolder
- strDrv = Left(strFolder, 2)
- strPath = Replace(Mid(strFolder, 3), "\", "\\") & "\\"
- Set colFiles = objWMI.ExecQuery("select * from CIM_DataFile where Drive='" & strDrv & "' and Path='" & strPath & "'")
- For Each objFile in colFiles
- If strDate >= Left(objFile.LastModified, 8) Then objFile.Delete
- Next
-
- Set colFolders = objWMI.ExecQuery("Associators of {Win32_Directory='" & strFolder & "'} where AssocClass = Win32_SubDirectory ResultRole = PartComponent")
- For Each objFolder in colFolders
- call EnumFiles(objFolder.Name)
- Next
- End Sub
复制代码
作者: sinun 时间: 2014-12-6 09:27
回复 5# DAIC
如果不安装中文,yyyy-M-d将不能认识别
作者: DAIC 时间: 2014-12-6 10:35
回复 7# sinun
改成 月/日/年 的格式会导致 if "%%~ta" leq "%DstDate%" 这个地方发生误判
比如 12/06/2013 会大于 12/05/2014
如果你的系统支持 forfiles 命令或者 powershell 的话,建议不要使用顶楼这个方案。
作者: sinun 时间: 2014-12-6 20:36
回复 8# DAIC
谢谢指导!
作者: sinun 时间: 2014-12-7 22:48
来个vbs,不用动注册表,不过隐藏文件删不掉
apang 发表于 2014-12-5 20:42
目录也对,怎么10天前的文件删除不了呢?请求支持!
作者: apang 时间: 2014-12-7 23:54
回复 10# sinun
不能删除是个什么状况?报错了没有?你用什么系统测试的呢?
作者: apang 时间: 2014-12-8 00:00
回复 10# sinun
你该不会保存的是 .bat 文件吧?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |