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

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

26.11.2020, 13:40. Показов 10077. Ответов 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
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 23:05
Лучший ответ Сообщение было отмечено Evgesha_3yo как решение

Решение

Студворк — интернет-сервис помощи студентам
Навскидку, так:
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
@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"
)
if not defined success echo Ни одного файла с указанными параметрами не обнаружено
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 (
                set /A success+=1
                setdate.exe -c %1 %date_creation%
                setdate.exe -m %1 %date_modification%
                exit /b
            )
        )
    )
)
exit /b
1
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 23:25  [ТС]
Немного допилил код, вот, что получилось:
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
@echo off
setlocal EnableDelayedExpansion
set "attrib_1=%*"
set "date_creation=28-03-2003"
set "date_modification=08-01-2001"
set /a %ERRORLEVEL%=0
 
for /f "delims=" %%a in ('dir /a-d/b/s "E:\Учёба\Архитектура ПК лб3\test\*.*"') do (
    call :step_1 "%%a"
)
if not defined success goto :mistake
pause
 
:exitkey
if %ERRORLEVEL%==0 (
    echo Файлы с указанными параметрами обнаружены
) else (
    echo Ни одного файла с указанными параметрами не обнаружено
)
 
exit /b
: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 (
                set /A success+=1
                setdate.exe -c %1 %date_creation%
                setdate.exe -m %1 %date_modification%
                exit /b
            )
        )
    )
)
:mistake
set /A ERRORLEVEL=1
goto :exitkey
 
exit /b
Все работает в целом
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 23:27
Ну работает и хорошо. Когда будете защищать лабу не забудьте, что на компьютере должен быть powershell установлен и утилита setdate
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 23:29  [ТС]
Оно у меня с самого начало было скачано, как только установил винду. А нужно запускать через powershell или как это работает?
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 23:36
В современных операционных системах он уже предустановлен. Запускаете, как и запускали, через cmd, добавив параметры. Powershell это современное консольное средство автоматизации для виндовых осей с нереальными возможностями. В случае с Вашим кодом, powershell мне понадобился для корректного извлечения атрибутов файла и унификации их с атрибутами, которые передаются скрипту в качестве параметров
0
0 / 0 / 0
Регистрация: 20.11.2020
Сообщений: 33
26.11.2020, 23:38  [ТС]
Понял. Ещё раз спасибо! Удачи)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.11.2020, 23:40
Да не за что, взаимно)
0
7691 / 2888 / 1110
Регистрация: 06.06.2017
Сообщений: 9,835
27.11.2020, 00:39
Evgesha_3yo, для PoSh тут никакие утилиты не требуются.
Windows Batch file
1
2
3
4
5
6
7
8
@chcp 1251>nul
@set "d=01/01/2020 01:02:03"
@pushd E:\Учёба\Архитектура ПК лб3\test
 
:sel
@set /p a="Введите атрибуты [ahrs]: "
@echo %a%|findstr /rc:"[^ahrs]"&&(cls&goto sel)
@powershell -c "ls -R -Force|where {$_.Mode -match '^[^d].*[%a%]'}|%%{if($_.Mode -match 'r'){$c=1;sp -Path $_.FullName -Name IsReadOnly -Value $false};$_.LastWriteTime='%d%';$_.CreationTime='%d%'; if($c=1){$c=0;sp -Path $_.FullName -Name IsReadOnly -Value $true}}"
0
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
12.05.2022, 00:40
Цитата Сообщение от FlasherX Посмотреть сообщение
тут никакие утилиты не требуются.
Подскажите пожалуйста, если есть полученный список файлов.\
И в цикле обхода файлов в папке добавлять время для изменения атрибутов (Время + 30 сек) перемещенных файлов, что то похожее на это:
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
@Echo Off
@chcp 1251>nul
SetLocal EnableDelayedExpansion
 
Set DataRoot=%~dp0
Set OutFile=%~dp0out.txt
Set Extensions=mp3 mp4 avi
del /q %OutFile%>nul
:: Задаем время
:#TimeTime
Set $TIME=30
For /f "delims=+-" %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set DT=%%i
Set /a tmsec= 3600 * (1%DT:~8,2%-100) + 60 * (1%DT:~10,2%-100) + 1%DT:~12,2%-100
Echo %DT:~8,2%.%DT:~10,2%.%DT:~12,2%
:: Задаем время конец
:::::::::::::::
  For %%A In (%Extensions%) Do (
    For /F "delims=" %%B In ('Dir "%DataRoot%\*.%%A" /B /A-D '
) Do (
set /a NumFile+=1& Echo !NumFile!   %%B
Echo !NumFile!  %%B>>"%OutFile%"
set NewFile=%DataRoot%NewFolder!NumFile!%%B 
set OldFile=%DataRoot%%%B
rem rem move %OldFile% %NewFile% rem Операция перемещения файлов в текущей папке
call #Repeat
Set NewTime=%h%:%m%:%s%
@set "NewDdateTime=01/01/2020 %NewTime%"
call #ChangeAttribute %NewFile% %NewDdateTime% Rem Билеберда, увы мне...
)
  )
:::::::::::::::
pause
exit
 
:#ChangeAttribute 
@set  a=a h
Set a=%2
@pushd %1
@echo %a%|findstr /rc:"[^ahrs]"&&(cls&goto sel)
@powershell -c "ls -R -Force|where {$_.Mode -match '^[^d].*[%a%]'}|%%{if($_.Mode -match 'r'){$c=1;sp -Path $_.FullName -Name IsReadOnly -Value $false};$_.LastWriteTime='%d%';$_.CreationTime='%d%'; if($c=1){$c=0;sp -Path $_.FullName -Name IsReadOnly -Value $true}}"
Exit /b
 
 
:: Добавляем 30 с
:#Repeat
Echo + %$TIME%
Set /a tmsec= tmsec + %$TIME%
Set /a h = tmsec / 3600 %% 24, m = tmsec %% 3600 / 60, s = tmsec %% 3600 %% 60
Set h=0%h%& Set m=0%m%& Set s=0%s%
Set h=%h:~-2%& Set m=%m:~-2%& Set s=%s:~-2%
Echo %h%.%m%.%s%
exit /b
Оригинал прибавления времени
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
:#Start
Set $TIME=
Set /p $TIME=Добавить секунд: 
set/p="%$TIME%"<nul|>nul findstr [^^0-9]&& echo Это не число!&& Goto #Start|| echo Ok!.
Cls
 
For /f "delims=+-" %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set DT=%%i
 
Set /a tmsec= 3600 * (1%DT:~8,2%-100) + 60 * (1%DT:~10,2%-100) + 1%DT:~12,2%-100
Echo %DT:~8,2%.%DT:~10,2%.%DT:~12,2%
:: Добавляем 30 с
:#Repeat
Echo + %$TIME%
Set /a tmsec= tmsec + %$TIME%
Set /a h = tmsec / 3600 %% 24, m = tmsec %% 3600 / 60, s = tmsec %% 3600 %% 60
Set h=0%h%& Set m=0%m%& Set s=0%s%
Set h=%h:~-2%& Set m=%m:~-2%& Set s=%s:~-2%
Echo %h%.%m%.%s%
Pause>nul
cls
Goto #Repeat


Добавлено через 40 минут
Можно конечно сделать копирование файлов с использованием вот этого безобразия: Изменение времени компьютера с последующей синхронизацией
0
1 / 1 / 0
Регистрация: 13.09.2018
Сообщений: 110
12.05.2022, 10:28
Цитата Сообщение от nordri Посмотреть сообщение
Windows Batch file
1
set NewFile=%DataRoot%NewFolder!NumFile!%%B
%DataRoot% текущая папка, NewFolder просто текст, для новой папки для перемещаемых файлов, !NumFile! номер для файла из исходной подпапки, %%B имя файла (возможно я ошибся, и тут полный путь файла)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2022, 10:28

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
50
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru