【问题标题】:Creation date in Windows CMDWindows CMD 中的创建日期
【发布时间】:2023-03-24 17:29:01
【问题描述】:

使用 Windows 批处理,此函数返回文件的创建日期:

:creationDate
set "CompareFile=%~1"
echo !CompareFile!
for /f "skip=5 tokens=1,2,4,5* delims= " %%a in ('dir  /a:-d /o:d /t:c') do (
    if "%%~c" NEQ "bytes" (
        if "%%~d"=="!CompareFile!" ( set "%~2=%%~a %%~b" )
    )
)
goto:eof

示例用法:

call :creationDate "!MyFile!" MyFileCreationDate
echo !MyFile! was made on !MyFileCreationDate!

函数中的变量:

%%~a = Creation Date
%%~b = Creation Time
%%~d = Filename (error when there is spaces!)

%%~1 = Filename to get the creation date for
%%~2 = Variable to store creation date in

但它不适用于带有空格或特殊字符的文件名。在这种情况下,%%~d 可能只包含文件名的前几个字母,或者什么都不包含,导致参数 2 没有返回值


目标是让它与我作为参数 1 传递给子例程的带空格的文件名匹配,并返回参数 2 作为参数 1 的创建日期。

【问题讨论】:

    标签: batch-file filenames


    【解决方案1】:
    @ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET "sourcedir=."
    
    FOR /f "delims=" %%a IN (
     'dir /b /a-d "%sourcedir%\*.txt" '
     ) DO (
     CALL :creationdate "%sourcedir%\%%a" c crdatetime
     CALL :creationdate "%sourcedir%\%%a" w wrdatetime
     CALL :creationdate "%sourcedir%\%%a" a acdatetime
     ECHO !crdatetime! !wrdatetime! !acdatetime! %%a
    
    )
    
    GOTO :EOF
    
    :creationDate
    for /f "skip=5 tokens=1,2 delims= " %%a in (
     'dir  /a:-d /o:d /t:%2 "%~1"') do set "%~3=%%~a %%~b"&goto:eof
    goto:eof
    

    虽然我会更改例程的名称。

    【讨论】:

    • 谢谢!这个版本具有我正在寻找的所有额外优点。
    【解决方案2】:
    • 为什么不在 dir 命令中包含文件名?
    • 要排除目录的其他行,您可以通过管道连接到 findstr。

    :: Q:\Test\2017-04\30\SO_43708547.cmd
    @Echo off&SetLocal EnableExtensions EnableDelayedExpansion
    
    Set "MyFile=%~1"
    
    call :creationDate "!MyFile!" MyFileCreationDate
    echo !MyFile! was made on !MyFileCreationDate!
    
    Goto :Eof
    
    :creationDate
    for /f "tokens=1-3* delims= " %%a in (
      'dir  /a:-d /o:d /t:c "%~1" ^| findstr /i "%~nx1$" '
    ) do set "%~2=%%~a %%~b"
    
    goto:eof
    

    示例输出(使用我的用户设置日期格式):

    > SO_43708547.cmd "test name.txt"
    test name.txt was made on 2017-04-30 18:49
    

    编辑将测试文件更改为包含空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 2018-08-18
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      相关资源
      最近更新 更多