Как получить дату последнего изменения файла в командной строке Windows? - PullRequest
18 голосов
/ 21 января 2010

Я использовал следующую команду для получения даты файла. Однако переменная fileDate возвращала пустое значение с тех пор, как мы перешли на другой сервер (Windows Server 2003).

FOR /f %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a 

Есть ли еще какой-нибудь более надежный способ получить дату файла?

Ответы [ 6 ]

35 голосов
/ 22 января 2010

Измените % на %% для использования в командном файле, для синтаксиса %~ta введите call /?

for %a in (MyFile.txt) do set FileDate=%~ta
11 голосов
/ 12 мая 2015

Вы можете сделать это

forfiles /M myfile.txt /C "cmd /c echo @fdate @ftime"
7 голосов
/ 30 января 2018

Полезная ссылка для получения свойств файла с использованием командного файла, в том числе время последнего изменения:

FOR %%? IN ("C:\somefile\path\file.txt") DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Drive and Path       : %%~dp?
    ECHO Drive                : %%~d?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)
2 голосов
/ 21 января 2010

У меня работает на Vista. Несколько вещей, чтобы попробовать:

  1. Замените find на полный путь команды find. find - это общее название инструмента. Есть UNIX-находка, которая сильно отличается от встроенной в Windows. как это:
    FOR /f %%a in ('dir ^|%windir%\system32\find.exe /i "myfile.txt"') DO SET fileDate=%%a

  2. проверить вывод команды в окне cmd.exe. Для этого вам нужно заменить %% на%.
    FOR /f %a in ('dir ^|c:\windows\system32\find.exe /i "myfile.txt"') DO SET fileDate=%a
    Это может дать вам некоторые идеи.

  3. Если это отображается пустым, то снова в командной строке попробуйте следующее:

    dir | c:\windows\system32\find.exe /i "myfile.txt"

Это должно показать вам, что вам нужно увидеть.

Если вы все еще не можете понять это, отредактируйте свое сообщение, включив в него то, что вы видите из этих команд, и кто-то вам поможет.

1 голос
/ 22 января 2010

Вы также можете получить дату изменения файлов, используя vbscript

Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile= objArgs(0)
WScript.Echo objFS.GetFile(strFile).DateLastModified

сохранить выше как mygetdate.vbs и в командной строке

c:\test> cscript //nologo mygetdate.vbs myfile
0 голосов
/ 21 января 2010

Какой вывод (точно) дает dir myfile.txt в текущем каталоге? Что произойдет, если вы установите разделители?

FOR /f "tokens=1,2* delims= " %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a 

(обратите внимание на пробел после delims=)
(чтобы упростить жизнь, вы можете сделать это из командной строки, заменив %%a на %a)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...