Сравнивать дату изменения файла с текущей датой в пакетном файле
Я должен написать пакетный файл, чтобы сделать несколько вещей
Первоначально я думал, что моя проблема была очень проста-захватить измененную дату txt-файла, расположенного в указанном каталоге, сравните эту дату с текущей датой, и если они одинаковы, сделайте что-то. Если их нет, сделайте что-нибудь другое.
строка, которую я использую для захвата текущей даты:
%date%
строки, которые я использую для захвата измененной даты моего указанного файла:
SET filename="C:New FolderNew.txt"
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
ECHO %filedatetime:~0,-6% >> %destination%
В приведенном выше случае я просто использую echo
чтобы увидеть, что возвращается, и кажется, что дата возвращается, но я получаю дополнительную информацию:
2012/02/19 02
Я хотел бы знать, как получить вышеуказанные значения, где они сопоставимы, а также как их правильно сравнить.
3 ответов
Мне нравится dbenham это путь, но если вы хотите, чтобы ваш код работал, вы можете сделать так:
set currentDate=%date%
SET filename="C:\MyFile.txt"
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
IF %filedatetime:~0, 10% == %currentDate% goto same
goto notsame
:same
echo Dates the same, do some code here
goto next
:notsame
echo Dates NOT the same, do some code here
goto end
:next
подумал, что стоит знать, как заставить вашу работу работать на случай, если она вам снова понадобится.
работа с датами намного сложнее в партии, чем должно быть.
есть одна команда, которая может сделать вашу работу легко в этом случае. FORFILES имеет возможность обрабатывать файлы, которые были изменены после конкретной даты. Использовать FORFILES /?
из командной строки, чтобы получить документацию по ее использованию.
эта простая команда перечислит все файлы, которые были изменены сегодня:
forfiles /m * /d 0
если найден хотя бы один файл, то ERRORLEVEL имеет значение 0, else ERRORLEVEL имеет значение 1.
у вас есть определенный файл, поэтому вы можете использовать
forfiles /m %filename% /d 0
if %errorlevel% == 0 (
echo The file was modified today
REM do whatever else you need to do
) else (
echo The file has not been modified today
REM do whatever else you need to do
)
существует более краткий способ сделать это выше. The &&
оператор используется для условного выполнения команды, если предыдущая команда была успешной, ||
используется для условного выполнения команд при сбое предыдущей команды. Однако, будьте осторожны,||
команды будут выполняться, если &&
команда(ы) не выполнена.
forfiles /m %filename% /d 0 && (
echo The file was modified today
REM do whatever else you need to do
) || (
echo The file has not been modified today
REM do whatever else you need to do
)
Помимо вопросов, поднятых в комментариях, добавленных к статье TechNet, что документы ForFiles Forfiles документация по Microsoft TechNet есть еще одна проблема, которая упоминается, но только если вы читать Между строк о часовом поясе, игнорируются. Поскольку ForFiles оценивает измененную дату, сообщенную в локальном времени, он будет обрабатывать файл, измененный в 02: 01 EST as старше чем файл, измененный в 02:59 по восточному поясному времени.