Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Дата создания (изменения) файла

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

Пользователь


Сообщения: 72
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:59, 04-10-2016

 

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


так создания или изменения? Если изменения то все просто, например вот так:
Код: Выделить весь код
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

Отправлено: 14:14, 04-10-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 72
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 14:17, 04-10-2016 | #3


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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 я такой возможности не знаю, кроме как вручную потрошить весь год помесячно, учитывая развчетырегодаизменчивый февраль.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:30, 04-10-2016 | #4


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Вот 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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 17:21, 04-10-2016 | #5


Пользователь


Сообщения: 72
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 20:22, 04-10-2016 | #6


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 04-10-2016 в 21:45.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:31, 04-10-2016 | #7


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


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

Отправлено: 22:50, 04-10-2016 | #8


Пользователь


Сообщения: 72
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 08:11, 05-10-2016 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Дата создания (изменения) файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Перенос атрибутов файлов - дата создания, изменения. __sa__nya Хочу все знать 11 12-08-2021 14:40
VBS/WSH/JS - Дата и время изменения файла lorents Скриптовые языки администрирования Windows 19 01-02-2015 19:28
CMD/BAT - [решено] Дата/время создания в имени файла art.andr Скриптовые языки администрирования Windows 8 09-04-2012 14:39
CMD/BAT - [решено] Дата изменения файла Sat_Kelman Скриптовые языки администрирования Windows 1 19-04-2011 11:03
.NET - [решено] Скачивание файла, где часть URL это дата посл. изменения лок. файла Efsey Программирование и базы данных 9 23-08-2010 19:48




 
Переход