Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/41: Рейтинг темы: голосов - 41, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33

Изменение даты и времени файлов (BATCH скрипты)

26.11.2020, 13:40. Показов 10057. Ответов 49

Студворк — интернет-сервис помощи студентам
Нужно написать batch-код с помощью которого в зависимости от атрибутов (-h, -r, -a) будет изменяться дата и время создания и редактирования файлов.

Желательно время на которое изменяется файл передавать в консоли как атрибут, но если не получится, то можно прописать и в самом batch-файле. В самом батнике я использовал nircmd и всё было бы шикарно, если бы он менял дату и время файлов у конкретных файлов в зависимости от прописанных атрибутов, но, к сожалению, это не работает и я не знаю как это сделать.
Прикрепляю свой код снизу (правда он не очень корректен из-за того, что он собственно не отслеживает сами атрибуты):

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
@echo off
echo %~t0
 
set catalog=%CD%
set /A ignorehidden=0
set /A ignorereadonly=0
set /A ignorearchived=0
set /A ERRORLEVEL=0
 
 
if "%~1"=="/?" goto :help
 
:loop
if not "%~1"=="" (
    if "%~1"=="-r" (
        set /A ignorereadonly=1
        shift
        goto :loop
    ) 
    if "%~1"=="-h" (
        set /A ignorehidden=1
        shift
        goto :loop
    )
    if "%~1"=="-a" (
        set /A ignorearchived=1
        shift
        goto :loop
    ) 
    if not "%~1"=="" (
        set catalog=%~s1
        shift
    )
    goto :loop
 
)
 
:check_attributes 
setlocal enabledelayedexpansion
for %%F in ("%catalog%") do (
    set attributes=%%~aF
    if "%ignorereadonly%"=="1" (
        if "!attributes:~1,1!" neq "r" (
            goto :set_error_1
        )   
    )
    if "%ignorearchived%"=="1" (
        if "!attributes:~2,1!" neq "a" (
            goto :set_error_1
        )   
    )
    if "%ignorehidden%"=="1" (
        if "!attributes:~3,1!" neq "h" (
            goto :set_error_1
        )   
    )
    
)
endlocal
 
 
for /f "delims=" %%a in ('dir/a-d/b/s "E:\Учёба\Архитектура ПК лб3\test\*.*"') do nircmd.exe setfiletime "%%a" "29-03-2003 21:03:03" "09-01-2001 00:00:00" 
 
 
:exitkey
if %ERRORLEVEL%==0 (
    echo Каталог %catalog% успешно найден
) else (
    echo Не удалось найти каталог %catalog%
)
 
exit /b
 
:set_error_1
set /A ERRORLEVEL=1
goto :exitkey
 
:help
echo Помощь:
@echo. 
echo Если синтаксис ожидаемый, тоесть search [искомый каталог для поиска] [атрибуты]
echo или же search [атрибуты] [искомый каталог для поиска], то программа завершит работу
echo с кодом ERRORLEVEL = 0 (все работает нормально), в противном случае
echo ERRORLEVEL = 1 (ошибка, работает не корректно) 
@echo.
echo Присутствующие и доступные атрибуты:
echo -h (hidden): фильтровать спрятанные каталоги
echo -r (readonly) : фильтровать каталоги только для чтения
echo -a (archive) : фильтровать архивированные каталоги
echo По умолчании все атрибуты = 0 
exit /b
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2020, 13:40
Ответы с готовыми решениями:

Изменение даты и времени создания файлов
Нужно написать батник, который будет менять дату и время создания файлов. Файлы могут быть указаны с помощью масок (или нескольких масок)....

Изменение даты и времени в Windows 10
Система не дает изменить дату и время, написано, что параметры контролируются организацией, в редакторе лок груп политик все параметры...

Изменение формата времени и даты
На Action подключил Form2, на procedure TForm2.FormActivate подключил ListBox1.Items.Add(DateToStr(Now)) и ...

49
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 21:20  [ТС]
Студворк — интернет-сервис помощи студентам
Скрипт запустил. Ситуация не изменилась. Так же если прописываешь только один атрибут, а файл имеет 2+, то он пропускает этот файл, и так же прописал 1.bat H R, но программа изменила дату и время файла, который просто был скрыт, а файлы, которые одновременно и скрыты и "только для чтения" пропустила
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 21:23
Если есть возможность, то выложите архив с файлами, так можно долго гадать в чем проблема. Если выложите, то укажите с какими параметрами запускали и каким должен быть результат (хотя бы парочку примеров)
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 21:30  [ТС]
1.docx - скрытый и только для чтения
1_1.docx - просто скрытый
2.txt, 3.txt - обычные файлы без доп параметров
4.docx - скрытый и только для чтения
5.docx, 6.txt - обычные файлы без доп параметров
Если 1.bat H R, то должны меняться даты у 1 и 4 файлов, а меняется только 1_1
Если 1.bat H то должны меняться даты у 1, 1_1 и 4 файлов, а меняется только у 1_1
Вложения
Тип файла: rar test.rar (311 байт, 10 просмотров)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 21:46
Цитата Сообщение от Evgesha_3yo Посмотреть сообщение
Если 1.bat H R, то должны меняться даты у 1 и 4 файлов, а меняется только 1_1
Ну, во-первых, дата должна меняться у 3-х файлов, так как:
A HR C:\test\1.docx
A H C:\test\1_1.docx
A C:\test\2.txt
A C:\test\3.txt
A HR C:\test\4.docx
A C:\test\5.docx
A C:\test\6.txt
А, во-вторых, вопросы уже к nircmd. Попробуйте изменить дату, допустим 1.docx скриптом:
Windows Batch file
1
2
3
4
5
@echo off
set "date_creation=29-03-2003 21:03:03"
set "date_modification=09-01-2001 00:00:00"
nircmd.exe setfiletime "C:\test\1.docx" "%date_creation%" "%date_modification%"
pause
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 21:51  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Попробуйте изменить дату, допустим 1.docx скриптом:
Не работает(
Цитата Сообщение от Karen87 Посмотреть сообщение
А, во-вторых, вопросы уже к nircmd.
А без nircmd никак нельзя сделать, если он так некорректно работает??
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 22:00
Цитата Сообщение от Evgesha_3yo Посмотреть сообщение
А без nircmd никак нельзя сделать, если он так некорректно работает??
Поищите утилиты консольные, я тоже поищу, а сама логика алгоритма должна быть корректной

Добавлено через 6 минут
unix-утилита touch меняет дату модификации на ура, но дату создания менять не умеет. Устраивает?
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 22:02  [ТС]
Да, я думаю и так будет довольно хорошо. Главное что бы всё работало как нужно)

Ещё нашел утилиту setdate.

И если использовать touch, его так же как и nircmd.exe нужно разархивировать в папку, где лежит батник?
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 22:05
Цитата Сообщение от Evgesha_3yo Посмотреть сообщение
Ещё нашел утилиту setdate
Затестируйте на 1.docx
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 22:08  [ТС]
Работает, но я не задавал никаких параметров пока что
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 22:12
Костыль конечно, но для Вашей задачи сойдёт:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
setlocal EnableDelayedExpansion
set "attrib_1=%*"
set "date_modification=2003-03-29 21:03:03"
for /f "delims=" %%a in ('dir /a-d/b/s "E:\Учёба\Архитектура ПК лб3\test\*.*"') do (
    call :step_1 "%%a"
)
pause
exit
:step_1
for /f "tokens=* delims=" %%a in ('powershell -executionpolicy bypass -command "(Get-ItemProperty -Path '%~1').Attributes | ForEach-Object {$string+=$_}; $array=$string.tostring().split(" "); foreach ($a in $array) {$string_2+=$a.Chars(0) + ' '}; $string_2"') do (
    set "attrib_2=%%a"
    for %%b in (!attrib_2!) do (
        for %%c in (%attrib_1%) do (
            if /i %%b==%%c (
                C:\bin\touch -mad "%date_modification%" %1
                exit /b
            )
        )
    )
)
exit /b
P.S. Для установки touch качаем пакет coreutils (во вложении), устанавливаем. Я для удобства перенёс папку bin из каталога с установленной программой в корень диска (советую тоже самое сделать)
Вложения
Тип файла: zip coreutils-5.3.0.zip (6.12 Мб, 6 просмотров)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 22:47
Для утилиты setdate, наверное, так:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
setlocal EnableDelayedExpansion
set "attrib_1=%*"
set "date_creation=29-03-2003"
set "date_modification=09-01-2001"
for /f "delims=" %%a in ('dir /a-d/b/s "E:\Учёба\Архитектура ПК лб3\test\*.*"') do (
    call :step_1 "%%a"
)
pause
exit
:step_1
for /f "tokens=* delims=" %%a in ('powershell -executionpolicy bypass -command "(Get-ItemProperty -Path '%~1').Attributes | ForEach-Object {$string+=$_}; $array=$string.tostring().split(" "); foreach ($a in $array) {$string_2+=$a.Chars(0) + ' '}; $string_2"') do (
    set "attrib_2=%%a"
    for %%b in (!attrib_2!) do (
        for %%c in (%attrib_1%) do (
            if /i %%b==%%c (
                setdate.exe -c %1 %date_creation%
                setdate.exe -m %1 %date_modification%
                exit /b
            )
        )
    )
)
exit /b
Добавлено через 25 минут
Цитата Сообщение от Karen87 Посмотреть сообщение
Для утилиты setdate, наверное, так:
У меня чётко отработало
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 22:47  [ТС]
УРААААААААААА!! Всё работает как и с touch, так и с setdate. Скорее всего буду использовать setdate, поскольку он больше подходит под условия лабораторной.
Хочу сказать огромное спасибо за то, что помогли мне с этим нелегким и довольно мучительным делом, большое человеческое СПАСИБО!
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 22:48
Цитата Сообщение от Evgesha_3yo Посмотреть сообщение
Хочу сказать огромное спасибо за то, что помогли мне с этим нелегким и довольно мучительным делом, большое человеческое СПАСИБО!
Да на здоровье, Вы молодец, быстро всё делали. Развивайтесь, успехов!
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 22:49  [ТС]
А ещё остался один вопросик небольшой: как сделать коды завершения? Тоесть как я понимаю - это если что-то пошло не так, то формируется ERRORLEVEL и он за собой несёт какую-то строку с ошибкой?
*они у меня прописаны в начальном коде, который я кидал в самом начале, но как их сюда вписать?
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 22:50
Цитата Сообщение от Evgesha_3yo Посмотреть сообщение
А ещё остался один вопросик небольшой: как сделать коды завершения? Тоесть как я понимаю - это если что-то пошло не так, то формируется ERRORLEVEL и он за собой несёт какую-то строку с ошибкой?
Смотря что хотите зафиксировать, коды меняются от операции к операции
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 22:51  [ТС]
Ну, например, то, что ни одного файла с указанными параметрами не существует, тогда выводится собственно сообщение с указанием данной ошибки. Вроде это делается через флаги, насколько я помню
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 22:54
Цитата Сообщение от Evgesha_3yo Посмотреть сообщение
Ну, например, то, что ни одного файла с указанными параметрами не существует, тогда выводится собственно сообщение с указанием данной ошибки. Вроде это делается через флаги, насколько я помню
Прумпумпум... В случае с моим кодом Вам errorlevel здесь не нужен, а нужно дописывать код, причём надо ещё подумать, как воткнуть эту проверку. Сильно надо?
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 22:58  [ТС]
ну, если честно, то да( это один из критериев лабораторной работы. может быть можно сделать какую-то доп проверку, что бы обнаружить это? или как-то это по-другому прописать?
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 23:00
Цитата Сообщение от Evgesha_3yo Посмотреть сообщение
ну, если честно, то да( это один из критериев лабораторной работы. может быть можно сделать какую-то доп проверку, что бы обнаружить это? или как-то это по-другому прописать?
Давайте тогда сразу все хотелки, по 10 раз я переделывать и доделывать не буду
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 23:02  [ТС]
на этом всё, режим подсказки я сам доделаю, там ничего сложного не должно быть (по идее просто if "%~1"=="/?" goto :help и во флаге :help вписываем собственно помощь)
ещё как критерий стоит робота с указанным каталогом(передается как параметр утилиты), но как я понимаю, то вы это в коде и так прописали. или нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.11.2020, 23:02

Изменение системного времени и даты
Программа должна выводить системное время и дату, и предложить мне поменять их Проблема в том что он её не меняет Помогите пожалуйста ...

Изменение даты и времени создания файла
Доброго времени суток друзья. Как можно реализовать программу, которая изменяет дату и время создания файла? т.е есть кнопка Выбрать...

Изменение даты и времени с использованием datetimepicker
Здравствуйте, проблема вот в чем: какую бы дату и время я не выбрал в datetimepicker в БД она изменяется на "0000-00-00...

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

Изменение даты и времени в заголовке файла PE-формата
Дорогие друзья, помогите, пожалуйста. Я хочу изменить дату и время в заголовке файла PE-формата. Вот кусок кода, где я пытаюсь вывести...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru