答案 0 :(得分:5)
即使使用 WSH \ Jscript \ VBscript ,也很难做到这一点(独立于时间日期设置),因为当您请求文件的日期/时间属性时,WSH不会返回日期对象,但是取决于时间设置的字符串(可以使用wmi,但这会达到性能)。
我想你已经安装了.net框架,这使得任务变得更加容易。
Here's一个应该适用于您的情况的混合工具。您可以使用您想要的任何名称保存它。以下是如何使用它(在此示例中称为FileDateFilterJS.bat
):
@echo off
for /f "tokens=* delims=" %%# in ('FileDateFilterJS.bat "." -hh -5') do (
echo deleting "%%~f#"
echo del /q /f "%%~f#"
)
pause
小时数为5 - -hh -5
且目录为最新版本 - "."
。您可以在echo
命令之前移除del
。
这个剧本花了我更多的时间,而不是我预期的(尽管我已经研究过这个主题,并准备好了一些部分)并且没有经过如此严格的测试,所以可能仍然没有马车。而且我假设可以改进帮助信息和选项。
答案 1 :(得分:3)
这里的解决方案都不适用于我。它们是非常创新的解决方案,第一个(.net / FileTimeFilerJS.bat [sic])实际上对我有用。然而,当我试图在另一个文件夹上调用它时,它只是崩溃了。我尝试了第二个(jscript / FileTimeFilterJs.bat),但它没有成功删除超过一小时的所有文件。
我的解决方案需要可执行文件,但我发现这对我来说是最好的解决方案。
我从GnuWin32下载了FindUtils,并提取了3个文件(你必须下载下面的两个拉链):libintl3.dll,libiconv2.dll和find.exe(它们的大小相差约1MB)。我将find.exe重命名为gnu_find.exe只是为了避免使用Windows FIND命令。
然后,您可以运行漂亮的GNU命令(以下命令适用于环境变量%fldr%指定的文件夹中超过120分钟的所有zip文件):
gnu_find %fldr% -name *[.:]zip -type f -mmin +120 -delete
而不是* .zip,我使用* [。] zip,因为Windows 7+会扩展* .zip,然后才能使用它。
答案 2 :(得分:1)
Here's另一个脚本只依赖于WSH / JSCRIPT和几乎相同的界面(并且不需要安装.net)。要显示超过5小时的文件,请使用:
FileTimeFilterJS.bat "." -hh -5 -filetime modified
答案 3 :(得分:0)
@echo off
cd /d "your file path"
:: delete files 3 hours ago. If you want other condition, refer https://www.w3schools.com/asp/func_dateadd.asp
echo wscript.echo dateadd("h",-3,now())>GetOldDate.vbs
for /f "tokens=1,2 delims= " %%i in ('cscript /nologo GetOldDate.vbs') do (
set d=%%i
set t=%%j
)
echo "%d%"
echo "%t%"
for /f "tokens=1,2,3 delims=/" %%a in ("%d%") do (
set y=%%a
set m=%%b
set d=%%c
)
for /f "tokens=1,2,3 delims=:" %%a in ("%t%") do (
set h=%%a
set mm=%%b
set s=%%c
)
if %m% LSS 10 set m=0%m%
if %d% LSS 10 set d=0%d%
if %h% LSS 10 set h=0%h%
if %mm% LSS 10 set mm=0%mm%
set OldDate=%y%/%m%/%d% %h%:%mm%
echo "%OldDate%"
del GetOldDate.vbs
for %%a in (*) do (
if "%%~ta" lss "%OldDate%" (
echo %%a
echo "%%~ta"
del %%a
)
)
答案 4 :(得分:0)
删除文件:
@echo off
echo >%temp%\temp.vbs for each File In CreateObject("Scripting.FileSystemObject").GetFolder("[path_file]").Files
echo >>%temp%\temp.vbs If DateDiff("n",File.DateCreated,Now) ^> 30 Then File.Deletee
echo >>%temp%\temp.vbs next
cscript /nologo %temp%\temp.vbs
Exit /b
删除文件夹:
@echo off
echo >%temp%\temp.vbs for each Folder In CreateObject("Scripting.FileSystemObject").GetFolder("[Path_folder]").subFolders
echo >>%temp%\temp.vbs If DateDiff("n",Folder.DateCreated,Now) ^> 30 Then Folder.Delete
echo >>%temp%\temp.vbs next
cscript /nologo %temp%\temp.vbs
Exit /b
要更改时差,我们需要在DateDiff("n",[Folder or File].DateCreated,Now) ^> 30
(条件为30
分钟)中替换条件。
.DateCreated
可以通过以下方式更改:.DateLastAccessed
或.DateLastModified
。
时差:"yyyy"
年,"m"
月,"d"
天,"h"
小时,"n"
分钟,"s"
秒。
["Path_file o Path_folder"]
必须用于目标文件或文件夹。