gpt4 book ai didi

batch-file - 如何获取文件夹年龄(从创建或修改日期算起的天数)

转载 作者:行者123 更新时间:2023-12-04 15:43:21 27 4
gpt4 key购买 nike

在特定路径下需要找到所有名为“MyData”的文件夹。在每个“Mydata”中都需要获取每个文件夹的年龄(天)。
然后如果年龄大于 N 天,我将执行一组命令。
到目前为止,我已经找到了所有文件夹“MyData”及其最后修改日期,脚本是:

for /f "delims=" %%a in ('dir /b /s /a:d "C:\Mypath\" ^|findstr /e /i "\Mydata"') do (
for /f "delims=" %%k in ('dir /b /s /a:d "%%~a\"') do (
echo %%k
for /d %%a in ("%%k") do echo Modified date: %%~ta
)
)

从这里需要将修改日期与当前日期进行比较,以获取以天为单位的年龄。请大家帮忙谢谢!
评论:请避免使用forfiles我的机器有WIN-XP和forfiles不存在并且即使在将其下载到 C:\windows\system32 后也无法使用。谢谢!

最佳答案

@npocmaka 让我为这个问题提供一个解决方案。接受挑战!

简单的答案是使用 forfiles .运行 WinXP 对 forfiles 来说没什么大碍. find forfiles.exe 难度不大并将其复制到 System32 中,而没有世界末日。注意:forfiles 的 Win2K res kit 版本有一点不同的语法——开关使用破折号而不是斜线,以及不同的参数间距。只需输入 forfiles帮助屏幕没有参数。对于后代,如果该链接指向 forfiles一年后消失,try searching open directories .

无论如何,避免使用 forfilesrobocopy真的削弱了你的选择。这些是我知道能够执行日期数学的仅有的两个 native 命令。如果这些命令不可用,那么您将不得不转向 Windows Script Host 或 PowerShell 进行日期数学运算。这是一个批处理/JScript 混合示例。 (将其保存为 .bat 文件。)

@if (@CodeSection==@Batch) @then

@echo off
setlocal

set "age=5"
pushd "C:\MyPath"

for /d %%a in (*MyData*) do (
for /d %%I in ("%%~a\*") do (
call :getAge modified created accessed "%%~fI"
setlocal enabledelayedexpansion

echo %%~nxI was created !created! days ago.
echo %%~nxI was modified !modified! days ago.
echo %%~nxI was last accessed !accessed! days ago.

if "!created!" gtr "%age%" (
rem // do stuff to "%%~fI" if folder created > 5 days ago
) else if "!modified!" gtr "%age%" (
rem // do something else to "%%~fI" if folder modified > 5 days ago
)
endlocal
)
)

popd
rem // end main runtime
goto :EOF

:getAge <modified_var> <created_var> <accessed_var> <file|folder>
setlocal
for /f %%I in ('cscript /nologo /e:JScript "%~f0" "%~4"') do set "%%I"
endlocal & set "%~1=%modified%" & set "%~2=%created%" & set "%~3=%accessed%"
goto :EOF

rem // end batch portion / begin JScript
@end

var fso = new ActiveXObject("scripting.filesystemobject"),
arg = WSH.Arguments(0),
file = fso.FileExists(arg) ? fso.GetFile(arg) : fso.GetFolder(arg);

var props = {
modified: new Date() - file.DateLastModified,
created: new Date() - file.DateCreated,
accessed: new Date() - file.DateLastAccessed
}

for (var i in props) {
// age in days
props[i] = Math.floor(props[i] / 1000 / 60 / 60 / 24);
WSH.Echo(i + '=' + props[i]);
}

关于batch-file - 如何获取文件夹年龄(从创建或修改日期算起的天数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28393865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com