Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/107: Рейтинг темы: голосов - 107, средняя оценка - 4.82
288 / 93 / 11
Регистрация: 29.05.2011
Сообщений: 2,399
1

Возврат даты модификации файла в CMD

24.05.2015, 23:30. Показов 21294. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В CMD хочу замутить такую штуку.
1. Вытянуть из конкретного файла *.* дату последней модификации.
2. Назначить для нее переменную "Х".
3. Сравнить месяц и год %X% с %DATE%.
4. При различии выполнить конкретную команду.
Поможете побаловаться?)))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2015, 23:30
Ответы с готовыми решениями:

Запуск cmd файла с определенного места в его коде из другого cmd файла
Здравствуйте. Требуется команда для запуска батника с метки внутри него, а не с первой команды в...

Копирование папки с датой модификации на день раньше текущей даты
Доброго времени суток, коллеги! Можете подсказать как можно скопировать каталог с неважно каким...

Распределение по папкам и переименование JPG-файлов на основе даты их создания или модификации
В папке много .jpg файлов, хочется организовать их исходя из Даты Создания (Модификации) в...

Поиск файла по дате модификации
Здравствуйте! Нужна помощь в решении следующей задачи. "Разработать командный файл, который бы...

7
3460 / 1998 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
25.05.2015, 11:23 2
Лучший ответ Сообщение было отмечено Bazaroff как решение

Решение

Цитата Сообщение от Bazaroff Посмотреть сообщение
Поможете побаловаться?)))


Ддя этого переменная "X" собственно не нужна. Всё делается в одну строку.

Код командной строки:
Windows Batch file
1
for %i in ("конкретный файл") do @for /f "tokens=2,3,5,6 delims=.-/ " %j in ("%date% %~ti") do @if %j%k neq %l%m конкретная команда
.

Код пакетного файла:
Windows Batch file
1
@for %%i in ("конкретный файл") do @for /f "tokens=2,3,5,6 delims=.-/ " %%j in ("%date% %%~ti") do @if %%j%%k neq %%l%%m конкретная команда
.
5
288 / 93 / 11
Регистрация: 29.05.2011
Сообщений: 2,399
25.05.2015, 18:01  [ТС] 3
ComSpec, большущее спасибо.
Я пытаюсь кое-как осваивать CMD и т.п. Ограничен в понимальных возможностях, к сожалению(, но пытаюсь! Пытаюсь!
Будьте добры, растолкуйте детально ваш скрипт.
И, если не затруднит, каков был бы скрипт с использованием переменных? Или с переменными нерешаемо?

Добавлено через 14 минут
Почитал о команде FOR. Понятного не много (для меня). Когда искал решение наткнулся на команду FORFILES, но как оказалось она внешняя и к тому же оперирует только батниками. (По крайней мере так было сказано в описании).
0
3460 / 1998 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
26.05.2015, 12:55 4
Лучший ответ Сообщение было отмечено Bazaroff как решение

Решение

Цитата Сообщение от Bazaroff Посмотреть сообщение
Будьте добры, растолкуйте детально ваш скрипт.

С помощью первого "for" получаем дату и время модификации файла ("%~ti"), которую передаём на разбор с помощью второго "for". Для разбора во втором цикле создаём строку "%date% %~ti", которая при раскрытии переменных будет иметь примерный вид "26.05.2015 26.11.2014 14:42". Поскольку нам надо сравнить месяц и год, то выделяем соответсвующие токены (2, 3, 5, 6), а разделителями будут точка и пробел (также в перечень разделителей добавлены дефис и слеш на случай другого формата даты). Далее сравниваются две пары (2-ой и 3-ий токены с 5-ым и 6-ым токенами), и по результату проверки истинности условия выполняется или не выполняется команда.



Цитата Сообщение от Bazaroff Посмотреть сообщение
И, если не затруднит, каков был бы скрипт с использованием переменных? Или с переменными нерешаемо?

Решаемо.

Варианты кода для пакетного файла:

1)
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
setlocal
 
call :sub "конкретный файл"
 
:: Используем лексикографическое сравнение.
if defined X if %X:~3,7% neq %date:~3,7% конкретная команда
 
endlocal
exit/b 0
 
:sub
 set X=%~t1
 goto :eof
;

2)
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
setlocal
 
for %%i in ("конкретный файл") do set X=%%~ti
 
:: Используем лексикографическое сравнение.
if defined X if %X:~3,7% neq %date:~3,7% конкретная команда
 
endlocal
exit/b 0
.


Вариант для командной строки (также с лексикографическим сравнением):
Windows Batch file
1
for %i in ("конкретный файл") do @set X=%~ti& cmd /v:on /c if defined X if !X:~3,7! neq %date:~3,7% конкретная команда
.



Цитата Сообщение от Bazaroff Посмотреть сообщение
Когда искал решение наткнулся на команду FORFILES, но как оказалось она внешняя...

Множество команд, постоянно используемых в пакетных файлах и командной строке, -- внешние, и это практически ни на что не влияет. Другое дело, что эта команда входит в комплектацию ОС, начиная с Windows Vista. Предназначена эта команда только для работы с файлами и папками, и разбирать строки она не может. Вот как с помощью этой команды можно получить дату и время модификации файла:
Windows Batch file
1
forfiles /m "конкретный файл" /c "cmd /c echo @fdate @ftime"
.
Обратите внимание, что дата и время модификации в команде "FORFILES" -- две самостоятельные переменные. Сочетание модификаторов же "~t" для переменных цикла при использовании "FOR" расширяет переменную до даты и времени модификации вместе.



Цитата Сообщение от Bazaroff Посмотреть сообщение
...и к тому же оперирует только батниками.

Не верьте.
3
0 / 0 / 0
Регистрация: 05.02.2019
Сообщений: 9
06.03.2019, 16:03 5
Цитата Сообщение от ComSpec Посмотреть сообщение
forfiles /m "конкретный файл" /c "cmd /c echo @fdate @ftime"
не пойму как сделать так, чтобы результат этой команды записывался в переменную?
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
07.03.2019, 21:10 6
Цитата Сообщение от gepard13 Посмотреть сообщение
результат этой команды записывался в переменную
Windows Batch file
1
2
3
4
@echo off
for /f "tokens=1*" %%a in ('forfiles /m "file.txt" /c "cmd /c echo @fdate @ftime"') do set "fdate=%%a"& set "ftime=%%b"
echo %fdate% %ftime%
pause
0
5 / 5 / 0
Регистрация: 17.03.2021
Сообщений: 161
13.11.2021, 01:26 7
alpap, ComSpec, ребят. а мне нужен код такой:

если дата создания ( или дата изменения - всё-равно в принципе) файла : C:\Temp\Pogloc\1.txt

более чем 40 часов, тогда выполняем код дальше , а если меньше 40 часов - exit

p.s. то есть этот код должен стоять в самом начале cmd файла, и проверять дату файла.
0
3049 / 1056 / 475
Регистрация: 29.05.2016
Сообщений: 4,442
13.11.2021, 15:26 8
Vadim89897575, пробуйте:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
set "file=C:\Temp\Pogloc\1.txt"
for /f "tokens=* delims=" %%a in ('powershell -executionpolicy bypass -command "if (((get-date) - (Get-ChildItem '%file%').CreationTime).totalHours -gt 40) {'yes'} else {'no'}"') do (
    if "%%a"=="yes" (
        echo Process
    ) else (
        exit
    )
)
pause
exit
Примечание.
В 5-ой строчке вместо echo Process указываете код, который должен отработать при выполнении условия даты создания файла более 40 часов по отношению к текущей либо можете реализовать в виде вызова call
1
13.11.2021, 15:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2021, 15:26
Помогаю со студенческими работами здесь

Получить дату модификации файла
Похоже запнулся за баг MS :wall: Нужно было из *.exe извлечь файл *.msp и взят в переменную...

Добавление текущей даты к имени файла при нестандартном формате вывода даты
Приветствую ! Давно и успешно используется код, который мне когда-то подсказали тут на форуме ...

BAT: получить дату создания/модификации файла и добавить в имя архива
Есть в папке файл, который нужно будет архивировать винраром. Знаю, как создать архив с текущей...

Создание файла INI из файла cmd/bat итд
Доброго времени суток. Есть задача - Создать файл с указанием параметра Х Есть пусть к файлу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru