Как получить последнюю измененную дату файла в командной строке Windows?

18

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

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

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

    
задан Ricky Supit 21.01.2010 в 18:24
источник

6 ответов

33

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

for %a in (MyFile.txt) do set FileDate=%~ta
    
ответ дан Andy Morris 22.01.2010 в 11:01
источник
  • +1. Это на самом деле правильный. В лучшем случае анализ вывода каталога - это безумие. Сторона примечания: в пакетном файле удвойте знаки%. –  Joey 22.01.2010 в 18:15
  • Спасибо, еще один вопрос: как получить только часть даты. Является ли следующий синтаксис достаточно надежным или есть лучший способ. set FileDate =% FileDate: ~ 0,10% –  Ricky Supit 25.01.2010 в 20:33
  • Это может не сработать, если вы измените свои международные настройки, но в противном случае это должно быть ОК –  Andy Morris 25.01.2010 в 21:39
  • вы можете дать мне подсказку о том, что на самом деле происходит здесь? Я не уверен, что понимаю, что% ~ ta или% a –  FistOfFury 06.01.2015 в 23:01
  • Попробуйте «помочь» из командной строки. –  Andy Morris 16.01.2015 в 12:33
7

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

forfiles /M myfile.txt /C "cmd /c echo @fdate @ftime"
    
ответ дан user2607028 12.05.2015 в 18:05
источник
2

Это работает для меня на 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"

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

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

ответ дан Cheeso 21.01.2010 в 18:38
источник
  • мой статус и (шаг 1 и 2) работают на моем компьютере и на любом другом сервере-победителю 2003, на который я могу получить свою руку. может ли это быть проблемой, когда она запускается под идентификатором службы и запускается планировщиком? –  Ricky Supit 21.01.2010 в 19:03
  • да, возможно. Программа поиска может отличаться для другого идентификатора службы, поскольку имеет другой путь. Лучше всего запускать эти команды под идентификатором службы, чтобы фиксировать и анализировать выходные данные. –  Cheeso 21.01.2010 в 19:21
  • Несколько лет назад у нас были некоторые аналогичные проблемы, связанные с пакетной обработкой вывода команды DIR из-за разного языка командного процессора (в нашем случае наш командный файл работал в win2000 на английском и испанском языках, но не удался на немецком языке ). –  PA. 21.01.2010 в 21:55
  • Также может случиться с британским и американским английским! –  Cheeso 21.01.2010 в 22:14
1

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

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 Parent Folder        : %%~dp?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)
    
ответ дан PodTech.io 30.01.2018 в 11:52
источник
1

вы можете получить дату изменения файлов, используя также 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
    
ответ дан ghostdog74 22.01.2010 в 01:33
источник
0

Какой вывод (точно) выполняет 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 )

    
ответ дан BlueRaja - Danny Pflughoeft 21.01.2010 в 18:51
источник