CMD/BAT - [решено] Дата создания (изменения) файла

Ответить
Аватара пользователя
Arsenik77

CMD/BAT - [решено] Дата создания (изменения) файла

Сообщение Arsenik77 »

Добрый день

Необходима вычислить дату изменен файла в формате (файл изменен N дней назад).

Нашел здесь, но там как-то мудрено, и она не совсем рабочая.

http://www.dostips.com/DtTipsDateTim...Batch.FileDate
Аватара пользователя
Elven

Re: CMD/BAT - [решено] Дата создания (изменения) файла

Сообщение Elven »

так создания или изменения? Если изменения то все просто, например вот так:



Код:

Код: Выделить всё

forfiles /m file.name /c "cmd /c echo @fdate"

А вот если именно создания, то тут уже придется извращаться извращениями. Например парсить вывод dir /o:d /tc



Код:

Код: Выделить всё

for /f %i in ('dir /o:d /tc file.name ^| findstr file.name') do echo %i
Аватара пользователя
Arsenik77

Re: CMD/BAT - [решено] Дата создания (изменения) файла

Сообщение Arsenik77 »

Про первый вариант я знаю, но нужно именно в формате "файл изменен N дней назад"



Внес поправку нужен файл изменен
Аватара пользователя
Arsenik77

Re: CMD/BAT - [решено] Дата создания (изменения) файла

Сообщение Arsenik77 »

Arsenik77, подсчет количества дней в данном случае на cmd/bat дело длительное и неблагодарное, может имеет смысл поcмотреть в сторону PS?



Код:

Код: Выделить всё

dir file.name | Select Fullname,CreationTime,LastWriteTime,
@{Name="age creation";Expression={[int]((Get-Date)-$_.CreationTime).TotalDays}},
@{Name="age changes";Expression={[int]((Get-Date)-$_.LastWriteTime).TotalDays}}

PS может адекватно от одной даты отнять другую, в то время как на cmd я такой возможности не знаю, кроме как вручную потрошить весь год помесячно, учитывая развчетырегодаизменчивый февраль.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Дата создания (изменения) файла

Сообщение megaloman »

Вот VBS. Сохраните скрипт в файл .vbs, сделайте на него значок, затаскивайте Ваш файл на этот значок.

Если принципиально cmd, можно придумать, используя VBS

Код:

Код: Выделить всё

Set Args = WScript.Arguments
If Args.Count = 0 Then
    MsgBox "Имя файла не задано"
Else
    FName = CStr(Args(0))
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set InFile = FSO.GetFile(FName)
    iDate = DateDiff("d", InFile.DateLastModified, Now, 2, 1)
    MsgBox "Файл" + vbCrLf + FName + vbCrLf + "изменён " + CStr(iDate) + " дней тому назад"
End If
Аватара пользователя
Arsenik77

Re: CMD/BAT - [решено] Дата создания (изменения) файла

Сообщение Arsenik77 »

megaloman, Elven, подскажите как это прикрутить к bat.

Например переменной задается файл, а в ответ требуемое количество дней .
Аватара пользователя
Arsenik77

Re: CMD/BAT - [решено] Дата создания (изменения) файла

Сообщение Arsenik77 »

Arsenik77, Сложно что-то делать, если есть недоговоренности - у Вас явно задача другая, а посчитать число дней - эпизод. Поэтому прибегну к извращениям:


Батник написан в 866 кодировке

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo Off
cls
Set "FName=Z:\Box_In\Диск здоровья Грация с магнитами - мини фитнес тренажер для талии - Интернет-магазин - Городской Центр Тренажеров.mht"
Set "VBS=%TEMP%\%~nx0.vbs"
 >"%VBS%" Echo Set Args = WScript.Arguments
>>"%VBS%" Echo FName = CStr(Args(0))
>>"%VBS%" Echo Set FSO = CreateObject("Scripting.FileSystemObject")
>>"%VBS%" Echo Set InFile = FSO.GetFile(FName)
>>"%VBS%" Echo iDate = DateDiff("d", InFile.DateLastModified, Now, 2, 1)
>>"%VBS%" Echo WScript.Echo iDate
Set "iDate=False"
FOR /F "usebackq" %%i IN (`cscript //Nologo "%VBS%" "%FName%" 2^>nul`) DO Set iDate=%%i
Del "%VBS%"
If Not "%iDate%"=="False" (
	Echo Файл %FName%
	Echo изменён %iDate% дней тому назад
) Else (
	Echo Файл %FName% не найден
)
pause
Аватара пользователя
greg zakharov

Re: CMD/BAT - [решено] Дата создания (изменения) файла

Сообщение greg zakharov »

Цитата Arsenik77:



нужно именно в формате "файл изменен N дней назад"



Код: Выделить всё

<?xml : version="1.0" encoding="windows-1251"?> ^<!-- :
  @echo off
    setlocal enabledelayedexpansion
      for /f "tokens=1,2,3*" %%i in (
        'dir /a-d /tw ^| findstr /brc:"[0-9]"'
      ) do (
        set "tm=%%i %%j"
        cscript /nologo "%~f0?.wsf" "!tm!" "%%l"
      )
    endlocal
  exit /b
-->
<package>
  <job id="VBS">
    <script language="VBScript"><![CDATA[
      WScript.Echo "Файл " & WScript.Arguments(1) & _
      " изменен " & _
        DateDiff("d", CDate(WScript.Arguments(0)), Date) & _
      " назад"
    ]]></script>
  </job>
</package>
Ответить

Вернуться в «Скриптовые языки администрирования Windows»