Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/63: Рейтинг темы: голосов - 63, средняя оценка - 4.83
3 / 3 / 0
Регистрация: 07.11.2011
Сообщений: 14

Изменение дат модификации (изменения) файлов на основе имён папок, в которых находятся эти файлы

07.11.2011, 22:02. Показов 13004. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Столкнулся с такой задачей:
есть папки вида ГГГГ\[ГГГГ.ММ.ЧЧ]\*.jpg
ГГГГ - год;
ММ - месяц;
ЧЧ - число.
Пример: 2010\[2010.09.07]\*.jpg

Нужно изменить дату модификации (изменения) файлов в папках на основе названия этих папок.
т.е. считать название второй папки [2010.09.07] - 07.09.2009 и применить изменения ко всем вложенным файлам, заменяя им дату модификации (изменения) файла на 07.09.2009. Время при этом трогать не принципиально
Заранее спасибо
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.11.2011, 22:02
Ответы с готовыми решениями:

BAT-файл для записи в лог имён и дат и времени изменения файлов, созданных после его же последнего запуска
Дня всем ГУРУ доброго! Возникла такая проблема, есть каталог куда периодически пишутся файлы... нужен батник, который проверял бы свой...

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

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

11
 Аватар для Ris
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
08.11.2011, 07:12
т.е. считать название второй папки [2010.09.07] - 07.09.2009
По-моему, как-то не правильно считано. Или я чего-то не понимаю?

Windows Batch file
1
2
3
4
5
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /a:d /b /s ^| findstr /r /c:"[[1-2][0-9][0-9][0-9].[0-1][0-9].[0-3][0-9]]"') do (set f="%%~nxi"&for /f "tokens=*" %%a in ('dir /a:-d /b /s "%%~i\*.jpg"') do (setdate -m "%%a" %f:~10,2%.%f:~7,2%.%f:~2,4%))
endlocal
exit
Программу setdate.exe достать из архива и положить в папку с BATником. BATник в принципе может лежать в корне диска, на котором есть эта папка. Но если есть еще папки этого формата, у которых вы не хотите менять дату изменения, то киньте в папку, где лежат папки с годами.
setdate.zip

P.S. Если расширение не .JPG поменяйте вот тут "%%~i\*.jpg", если вам без разницы поставьте *.*.
2
3 / 3 / 0
Регистрация: 07.11.2011
Сообщений: 14
09.11.2011, 13:31  [ТС]
Цитата Сообщение от Ris Посмотреть сообщение
По-моему, как-то не правильно считано. Или я чего-то не понимаю?

Bash
1
2
3
4
5
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /a:d /b /s ^| findstr /r /c:"[[1-2][0-9][0-9][0-9].[0-1][0-9].[0-3][0-9]]"') do (set f="%%~nxi"&for /f "tokens=*" %%a in ('dir /a:-d /b /s "%%~i\*.jpg"') do (setdate -m "%%a" %f:~10,2%.%f:~7,2%.%f:~2,4%))
endlocal
exit

P.S. Если расширение не .JPG поменяйте вот тут "%%~i\*.jpg", если вам без разницы поставьте *.*.
Спасибо за ответ.
Но возникли вопросы, пробовал разобраться, но не могу понять в чем проблема:
Пробовал протестировать данный bat-ик.

На диске D была создана папка TEST
в неё помещен бат и программа setdate
в ней же создано каталоги следующего содеражания:
TEST ->
>- 1111 ->
>- [1999.02.02] тест
DSC01053.JPG
DSC01053.JPG

>- [2020.06.11] rrr
DSC01062.JPG
DSC01056.JPG

сам бантик
Bash
1
2
3
4
5
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /a:d /b /s ^| findstr /r /c:"[[1-2][0-9][0-9][0-9].[0-1][0-9].[0-3][0-9]]"') do (set f="%%~nxi"&for /f "tokens=*" %%a in ('dir /a:-d /b /s "%%~i\*.jpg"') do (setdate -m %%a "%f:~10,2%.%f:~7,2%.%f:~2,4%"))
endlocal
pause
exit


Бантик запустился но результатов не дал.
Вот результаты:

лог
Bash
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
D:\TEST>setlocal enabledelayedexpansion
 
D:\TEST>for /F "tokens=*" %i in ('dir /a:d /b /s | findstr /r /c:"[[1-2][0-9][0-
9][0-9].[0-1][0-9].[0-3][0-9]]"') do (set f="%~nxi"  & for /F "tokens=*" %a in (
'dir /a:-d /b /s "%~i\*.jpg"') do (setdate -m %a "~10,2f:~7,2f:~2,4" ) )
 
D:\TEST>(set f="[1999.02.02] тхёт"  & for /F "tokens=*" %a in ('dir /a:-d /b /s
"D:\TEST\1111\[1999.02.02] тхёт\*.jpg"') do (setdate -m %a "~10,2f:~7,2f:~2,4" )
 )
 
D:\TEST>(setdate -m D:\TEST\1111\[1999.02.02] тхёт\DSC01053.JPG "~10,2f:~7,2f:~2
,4" )
usage: setdate <command> <file> <dd.mm.yyyy>
 
Commands:
        -c - set creation date of file
        -m - set modification date of file
        -a - set last-access date of file
        -d - set all date of file
 
setdate v 1.0
Copyright (C) 2002 Yury Y. Usmanov aka Kapitan
[url]http://kapitanus.narod.ru[/url] | mailto:yury@usmanov.kiev.ua
 
D:\TEST>(setdate -m D:\TEST\1111\[1999.02.02] тхёт\DSC01054.JPG "~10,2f:~7,2f:~2
,4" )
usage: setdate <command> <file> <dd.mm.yyyy>
 
Commands:
        -c - set creation date of file
        -m - set modification date of file
        -a - set last-access date of file
        -d - set all date of file
 
setdate v 1.0
Copyright (C) 2002 Yury Y. Usmanov aka Kapitan
[url]http://kapitanus.narod.ru[/url] | mailto:yury@usmanov.kiev.ua
 
D:\TEST>(set f="[2020.06.11] rrr"  & for /F "tokens=*" %a in ('dir /a:-d /b /s "
D:\TEST\1111\[2020.06.11] rrr\*.jpg"') do (setdate -m %a "~10,2f:~7,2f:~2,4" ) )
 
 
D:\TEST>(setdate -m D:\TEST\1111\[2020.06.11] rrr\DSC01056.JPG "~10,2f:~7,2f:~2,
4" )
usage: setdate <command> <file> <dd.mm.yyyy>
 
Commands:
        -c - set creation date of file
        -m - set modification date of file
        -a - set last-access date of file
        -d - set all date of file
 
setdate v 1.0
Copyright (C) 2002 Yury Y. Usmanov aka Kapitan
[url]http://kapitanus.narod.ru[/url] | mailto:yury@usmanov.kiev.ua
 
D:\TEST>(setdate -m D:\TEST\1111\[2020.06.11] rrr\DSC01062.JPG "~10,2f:~7,2f:~2,
4" )
usage: setdate <command> <file> <dd.mm.yyyy>
 
Commands:
        -c - set creation date of file
        -m - set modification date of file
        -a - set last-access date of file
        -d - set all date of file
 
setdate v 1.0
Copyright (C) 2002 Yury Y. Usmanov aka Kapitan
[url]http://kapitanus.narod.ru[/url] | mailto:yury@usmanov.kiev.ua
 
D:\TEST>endlocal.
Как видно в этой части кода возникает какая то ошибка и setdate не даются цифры даты: год месяц число

Bash
1
"~10,2f:~7,2f:~2


бантик запускается из под windows xp sp3 rus
в чем же может быть проблема?
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
09.11.2011, 15:33
странные вы люди сами написали команду
setlocal enabledelayedexpansion
ну так надо использовать отложенное раскрытие
весь код переписывать не буду но в последнем куске просто надо писать так
Code
1
do (setdate -m %%a "!f:~10,2!.!f:~7,2!.!f:~2,4!"))
2
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 10
09.11.2011, 15:46
привет, не могли ьы вы помочь с созданием bat. файла?

Назовите командный файл SSD2.BAT.
Включайте свое имя как замечание в SSD2.BAT.
Включайте дату создания как замечание в SSD2.BAT.
Включайте функцию SSD2.BAT, поскольку замечание в SSD2.BAT - переадресовывает продукцию директора К:\виндоуса к файлу, названному пользователем.
Имя файла, обеспеченное пользователем, является первым аргументом.
Действительный выключатель для директора команды - дополнительный второй аргумент.
Расширение файла - дополнительный третий аргумент
Если файл, названный пользователем уже, существует, SSD2.BAT немедленно производит сообщение об ошибке и затем выходит, не казня директора.
Сообщение об ошибке, произведенное SSD2.BAT, должно показать, "имя файла уже существует, прерывая SSD2."

вроде бы все зделал не понятен трутий пункт
0
09.11.2011, 16:46

Не по теме:

в одной теме обсуждается один вопрос.
Не стоит тем боле влезать сюда со своими которые никак не связаны.
А у вас вопрос просто непонятный.

0
 Аватар для Ris
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
09.11.2011, 18:34
WTF, значит случайно скопировал,не последнюю версию BAT-ника, извиняюсь.
0
3 / 3 / 0
Регистрация: 07.11.2011
Сообщений: 14
09.11.2011, 18:59  [ТС]
Цитата Сообщение от Ris Посмотреть сообщение
WTF, значит случайно скопировал,не последнюю версию BAT-ника, извиняюсь.
Я дико извиняюсь
вот версия бантика которой я пользовался с учетом поправок
Bash
1
2
3
4
5
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /a:d /b /s ^| findstr /r /c:"[[1-2][0-9][0-9][0-9].[0-1][0-9].[0-3][0-9]]"') do (set f="%%~nxi"&for /f "tokens=*" %%a in ('dir /a:-d /b /s "%%~i\*.jpg"') do (setdate -m %%a "!f:~10,2!.!f:~7,2!.!f:~2,4!"))
endlocal
pause
exit
Выдает такой результат:
Code
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
d:\TEST\www>setlocal enabledelayedexpansion
 
d:\TEST\www>for /F "tokens=*" %i in ('dir /a:d /b /s | findstr /r /c:"[[1-2][0-9
][0-9][0-9].[0-1][0-9].[0-3][0-9]]"') do (set f="%~nxi"  & for /F "tokens=*" %a
in ('dir /a:-d /b /s "%~i\*.jpg"') do (setdate -m %a "!f:~10,2!.!f:~7,2!.!f:~2,4
!" ) )
 
d:\TEST\www>(set f="[2006.11.12] fff"  & for /F "tokens=*" %a in ('dir /a:-d /b
/s "d:\TEST\www\[2006.11.12] fff\*.jpg"') do (setdate -m %a "!f:~10,2!.!f:~7,2!.
!f:~2,4!" ) )
 
d:\TEST\www>(setdate -m d:\TEST\www\[2006.11.12] fff\S7004442.JPG "!f:~10,2!.!f:
~7,2!.!f:~2,4!" )
usage: setdate <command> <file> <dd.mm.yyyy>
 
Commands:
        -c - set creation date of file
        -m - set modification date of file
        -a - set last-access date of file
        -d - set all date of file
 
setdate v 1.0
Copyright (C) 2002 Yury Y. Usmanov aka Kapitan
http://kapitanus.narod.ru | mailto:yury@usmanov.kiev.ua
 
d:\TEST\www>(setdate -m d:\TEST\www\[2006.11.12] fff\S7004443.JPG "!f:~10,2!.!f:
~7,2!.!f:~2,4!" )
usage: setdate <command> <file> <dd.mm.yyyy>
 
Commands:
        -c - set creation date of file
        -m - set modification date of file
        -a - set last-access date of file
        -d - set all date of file
 
setdate v 1.0
Copyright (C) 2002 Yury Y. Usmanov aka Kapitan
http://kapitanus.narod.ru | mailto:yury@usmanov.kiev.ua
 
d:\TEST\www>endlocal
 
d:\TEST\www>pause
Для продолжения нажмите любую клавишу . . .
не могли бы выложить свою последнею версию бантика?
1
 Аватар для Ris
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
09.11.2011, 20:32
Сейчас исправлю, но вы писали:
есть папки вида ГГГГ\[ГГГГ.ММ.ЧЧ]
а не вида: "[ГГГГ.ММ.ЧЧ] gfhsfgh"

Добавлено через 1 час 5 минут
Получилось как-то коряво и не в одну строчку, ну да ладно.
Bash
1
2
3
4
5
6
7
8
9
@echo off
setlocal enabledelayedexpansion
set /a q=0
for /f "tokens=2 delims=[]" %%d in ('dir /a:d /b /s ^| findstr /r /c:"[[1-2][0-9][0-9][0-9].[0-1][0-9].[0-3][0-9]]"') do (set /a q+=1&set f!q!="%%d")
set /a q=0
for /f "tokens=*" %%i in ('dir /a:d /b /s ^| findstr /r /c:"[[1-2][0-9][0-9][0-9].[0-1][0-9].[0-3][0-9]]"') do (set /a q+=1&call set x=%%f!q!%%&for /f "tokens=*" %%a in ('dir /a:-d /b /s "%%~i\*.jpg"') do (setdate -m "%%a" !x:~9,2!.!x:~6,2!.!x:~1,4!))
endlocal
pause
exit
1
3 / 3 / 0
Регистрация: 07.11.2011
Сообщений: 14
09.11.2011, 21:13  [ТС]
аааа большое вам спасибо!!
1
 Аватар для Ris
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
10.11.2011, 13:58
Менне корявая версия.
Bash
1
2
3
4
5
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /a:d /b /s ^| findstr /r /c:"[[1-2][0-9][0-9][0-9].[0-1][0-9].[0-3][0-9]]"') do (for /f "tokens=2 delims=[]" %%d in ('echo "%%~nxi"') do (set f="%%d"&for /f "tokens=*" %%a in ('dir /a:-d /b /s "%%~i\*.jpg"') do (setdate -m  "%%a" !f:~9,2!.!f:~6,2!.!f:~1,4!)))
endlocal
exit
1
3 / 3 / 0
Регистрация: 07.11.2011
Сообщений: 14
14.02.2012, 20:29  [ТС]
Здравствуйте еще раз.
Не знаю стоит ли создавать отдельную тему.

Всё дело в том что возник вопрос как немного подправить это бантик (который меня очень выручает), так чтоб дата бралась не в части названии папки, а в в первых символах самого файла
т.е. просмотр всех файлов вложенных в во всех папках
и только тем которые будут начинаться с ГГГГ.ММ.ДД_название_файла.jpg изменять дату через setdate
я так понимаю это делается через
Code
1
for /f "tokens=*"
Но пока мои эксперименты не увенчались успехом(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.02.2012, 20:29
Помогаю со студенческими работами здесь

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

Создание папки на основе частей имён файлов
Доброго времени суток. Есть задачка: В директории существует n-ое количество файлов *.mxl. например: fg_7777_19_20150801.xml ...

Метод с возможностью осуществлять поиск файлов и папок по имени размеру, датам создания, доступа и модификации
Не могу найти подходящею функцию возможность осуществлять поиск файлов и папок по имени размеру, датам создания, доступа и модификации ...

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

Переименование файлов в папках с добавлением к именам этих файлов имён этих папок
Есть 4 папки с архивом записей с камеры видеонаблюдения с именами 13 14 15 16. В каждой папке находится 60 минутных файлов в формате...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru