批处理文件:获取文件夹的创建日期

3

有没有一种方法可以在纯批处理文件中(无需PowerShell脚本)获取文件夹的创建日期?特别是我想在这个for循环中获取它:

FOR /f "tokens=*" %%G in ('dir /b /s /a:d "C:\asdf\*"') DO CALL :loopbody "%%~tG" "%%G"

这个循环调用一个“函数”,将文件夹的修改日期作为第一个参数,文件夹路径作为第二个参数。

2个回答

7
for /f "skip=5 tokens=1,2 delims= " %%A in ('dir /ad /od /tc "dirname"') do (
  echo %%A-%%B
  goto :end_loop
)
:end_loop

尝试这个。结果将取决于您的时间设置,可能需要调整令牌和分隔符。也可以使用 WMIC 和混合 jscript/vbscript,但需要几分钟来创建脚本。

使用 wmic 进行编辑:

WMIC path Win32_Directory WHERE name='C:\\SomeDir' get creationdate

编辑 下面是一些常用的脚本,它们使用不同的方法获取文件或目录的时间戳:

  1. fileModifiedTime.bat - 基于 robocopy 获取文件最后修改时间
  2. fileTimes.bat - 使用 WMIC 获取文件时间戳
  3. dirTimes.bat - 使用 WMIC 获取目录时间戳
  4. fileTimesJS.bat - 使用 jscript 获取文件时间戳
  5. dirTimesJS.bat - 使用 jscript 获取目录时间戳
  6. fileTimesNET.bat - 使用 .NET 获取文件时间戳
  7. dirTimesNET.bat - 使用 .NET 获取目录时间戳

2
我认为 die 应该改成 dir - Matt Williamson
1
这看起来是一个不错的解决方案,但有没有办法避免dir命令的最后两行。对于我来说,最后2行类似于“0个文件 0字节”和“6个目录 54,315,020,288字节可用”。 - Gab
在尝试了npocmaka和Endoro的解决方案之后,我不得不把采纳的答案给了npocmaka,因为它比Endoro的解决方案快得多。此外,它更简单。 npocmaka解决方案的缺点是它会返回3行无用的内容。 - Gab

4
    @ECHO OFF &SETLOCAL
    CD "StartFolder"
    FOR /D /R %%G in (*) DO (
        SET "FileName=%%~G"
        SETLOCAL ENABLEDELAYEDEXPANSION
        FOR /F %%H IN ('wmic fsdir where name^="!FileName:\=\\!" get creationdate^|find "."') DO SET "cdate=%%H"
        CALL :loopbody "!cdate:~6,2!/!cdate:~4,2!/!cdate:~0,4!-!cdate:~8,2!:!cdate:~10,2!:!cdate:~12,2!" "!FileName!"
        ENDLOCAL
    )
    GOTO:EOF

    :loopbody
    ECHO %~1 "%~2"
    EXIT /B

+1 但看起来太复杂了。为什么不直接使用 %%~dpfnG 而不是 dir 呢? - npocmaka
抱歉,您的意思是什么?%%~dpfnG 是什么? - Endoro
有没有办法同时获取创建时间? - Gab
@Endoro,您可以在不调用dir命令的情况下获取到目录的完整路径。 - npocmaka
@npocmaka 哦,我明白你的意思了,是在 (*) 中添加了 /D /R "C:\SomeDir" %%G,并且加入了创建时间。 - Endoro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接