Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Дата создания (изменения) файла (http://forum.oszone.net/showthread.php?t=319428)

Arsenik77 04-10-2016 13:59 2674947

Дата создания (изменения) файла
 
Добрый день
Необходима вычислить дату изменен файла в формате (файл изменен N дней назад).
Нашел здесь, но там как-то мудрено, и она не совсем рабочая.
http://www.dostips.com/DtTipsDateTim...Batch.FileDate

Elven 04-10-2016 14:14 2674952

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

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 04-10-2016 14:17 2674954

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

Внес поправку нужен файл изменен

Elven 04-10-2016 14:30 2674957

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 04-10-2016 17:21 2675002

Вот 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 04-10-2016 20:22 2675067

megaloman, Elven, подскажите как это прикрутить к bat.
Например переменной задается файл, а в ответ требуемое количество дней .

megaloman 04-10-2016 21:31 2675104

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

@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 04-10-2016 22:50 2675128

Цитата:

Цитата 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>


Arsenik77 05-10-2016 08:11 2675186

megaloman, Именно то, что нужно!!


Время: 07:43.

Время: 07:43.
© OSzone.net 2001-