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

Командный файл, переименовывающий файл по тегу строки внутри файла с добавлением текущей даты и времени ГГГГММДД_ЧЧММСС

02.02.2023, 12:23. Показов 2396. Ответов 41

Студворк — интернет-сервис помощи студентам
Добрый день!
Помогите, пожалуйста, написать командный файл.
Задача следующая: выгружаются файлы с одинаковым именем, внутри у них есть строка "номер", в каких-то файлах он 654987, в других - 123456 и т.д.
Нужно данный файл переименовать по этому номеру, добавив вначале "Группа1"/"Группа2" и т.д., а в конце текущую дату ГГГГММДД_ЧЧММСС (дата переименования файла).
То есть должно получится следующее:
Группа1_654987_ГГГГММДД_ЧЧММСС.txt
Группа2_123456_ГГГГММДД_ЧЧММСС.txt
и т.д.
и далее данный файл необходимо переместить в другую папку.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.02.2023, 12:23
Ответы с готовыми решениями:

Вывод текущей даты и времени в файл
Здравствуйте. Подскажите пожалуйста, что нужно сделать, чтобы текущая дата и время, в заданном формате, выводились в .txt файл, а не в...

Создать командный файл для изменения даты /времени в зависимости от переданного аргумента
Если первый параметр равен 1, то меняем системное время. Если первый параметр равен 2, то меняем системную дату. Если первый параметр равен...

Разработать командный файл (аналог команды tail в Unix). Командный файл печатает конец файла
Здравствуйте, при запуске командного файла пишет, что "системе не удается найти указанный путь".Программа создает текстовый документ,...

41
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,817
03.02.2023, 11:40
Студворк — интернет-сервис помощи студентам
Nick0l, если файл в ANSI, то и батник в ней:
Windows Batch file
1
2
3
4
5
6
7
@echo off&pushd %~dp0&chcp 1251>nul
@set f=итог.txt
for /f "tokens=2 delims==" %%d in ('wmic os get localdatetime /format:list') do @set "d=%%~nd"
for /f "tokens=2 delims==" %%n in ('^<%f% find/i "номер="') do set n=%%n
if %n%==654987 (set x=1) else if %n%==123456 (set x=2) else if %n%==456987 (set x=3) else exit
if not exist D:\%x% md D:\%x%
move %f% D:\%x%\Группа%x%_%n%_%d:~,8%_%d:~8%.txt
0
0 / 0 / 0
Регистрация: 25.12.2022
Сообщений: 29
03.02.2023, 14:21  [ТС]
Не отрабатывает. Подскажите, пожалуйста, где именно указаны пути или куда их нужно прописать принудительно?
И еще пишет ошибку "непредвиденное явление: (set."
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,817
03.02.2023, 15:48
Источником является папка батника. Путь получателя D:\ вы сами указали.
Ошибка может быть либо из-за отсутствия файла, либо при несоответствии указанной кодировки.
0
0 / 0 / 0
Регистрация: 25.12.2022
Сообщений: 29
03.02.2023, 16:40  [ТС]
Извините, не получается у меня сделать так, чтобы он отработал корректно. Файл в АNSI на месте, они могут быть оба в ОЕМ?
Если Вас не затруднит, распишите, пожалуйста, что где должно лежать судя по логике скрипта, возможно что-то не учитываю..
И есть ли более простой вариант написания батника? для чайников)))
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,817
03.02.2023, 17:48
Цитата Сообщение от Nick0l Посмотреть сообщение
они могут быть оба в ОЕМ?
К чему вопрос? Разве программа выгружает данные в OEM?

Цитата Сообщение от Nick0l Посмотреть сообщение
Если Вас не затруднит, распишите, пожалуйста
А что я не расписал? Батник лежит рядом с итог.txt, после его запуска итог.txt переместится в D:\<1-3>\ в новым именем.
0
0 / 0 / 0
Регистрация: 25.12.2022
Сообщений: 29
06.02.2023, 13:59  [ТС]
Приветствую! Прошу прощения, что сразу не ответила, на выходные выпала немного.
Насчет ОЕМ - просто вопрос, пыталась понять должно ли это быть обязательно в ANSI или главное это синхронность?
Кодировку смотрела в Fare
Буду пробовать еще, спасибо за детальность огромное, напишу по итогу.
А какие-то иные вариации написания в батнике этого же функционала возможны? Пусть строк больше будет, но так, чтобы пошагово можно было протестить, без большого кол-ва взаимосвязей?
Для простых смертных))
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,817
06.02.2023, 15:50
Цитата Сообщение от Nick0l Посмотреть сообщение
должно ли это быть обязательно в ANSI
Угу.
Цитата Сообщение от Nick0l Посмотреть сообщение
Кодировку смотрела в Fare
И что показывает?
Цитата Сообщение от Nick0l Посмотреть сообщение
А какие-то иные вариации написания в батнике этого же функционала возможны?
С учётом применения разных утилит и средств автоматизации (встроенных и нет) таких вариаций может быть уйма, нафантазировать можно всякого. Впустую тратить время на массу интерпретаций смысла не вижу. Механизмы тут использованы традиционные, так что ничего тут особо экстраординарного нет.
Windows Batch file
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
@echo off
pushd %~dp0
chcp 1251>nul
set f=итог.txt
 
if not exist %f% (
   echo Рядом с %~nx0 нет файла %f%^!
   pause
   exit
)
 
for /f "tokens=2 delims==" %%d in (
   'wmic os get localdatetime /format:list'
) do set "d=%%~nd"
 
if not defined d (
   echo Проблема получения даты через wmic^!
   pause
   exit
)
 
for /f "tokens=2 delims==" %%n in (
   '^<%f% find/i "номер="'
) do set n=%%n
 
if not defined n (
   echo Проблема получения номера из файла. Проверьте кодировку %f%^!
   pause
   exit
)
 
 
if %n%==654987 (
   set x=1
) else (
   if %n%==123456 (
      set x=2
   ) else (
      if %n%==456987 (
         set x=3
      ) else (
         exit
      )
   )
)
 
if not exist i:\%x% md i:\%x%
move %f% i:\%x%\Группа%x%_%n%_%d:~,8%_%d:~8%.txt
0
0 / 0 / 0
Регистрация: 25.12.2022
Сообщений: 29
06.02.2023, 17:26  [ТС]
пишет проблема получения даты через wmici

Добавлено через 28 минут
это чего не так значит?
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,817
06.02.2023, 21:27
Какая версия Windows? Возможно, у вас wmic выпилен, или какая-то служба отключена.
Что пишет, когда вы из cmd wmic os get localdatetime /format:list выполняете?
0
0 / 0 / 0
Регистрация: 25.12.2022
Сообщений: 29
08.02.2023, 11:27  [ТС]
приветствую.
Выдаёт дату по этой команде, всё верно

Добавлено через 2 минуты
win10 Pro
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,817
08.02.2023, 11:37
Цитата Сообщение от Nick0l Посмотреть сообщение
Выдаёт дату по этой команде, всё верно
Хм. А так?
Windows Batch file
1
for /f "tokens=2 delims==" %d in ('wmic os get localdatetime /format:list') do @echo %~nd
0
0 / 0 / 0
Регистрация: 25.12.2022
Сообщений: 29
08.02.2023, 11:43  [ТС]
Тоже дату успешно выводит
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,817
08.02.2023, 11:51
Мда. Попробуйте в самом сценарии после delims== добавить . для первого for. Поможет?
Только возьмите последние 2 строки из первого кода с D: вместо i:.
0
0 / 0 / 0
Регистрация: 25.12.2022
Сообщений: 29
08.02.2023, 12:34  [ТС]
Тоже не отрабатывает, а можно вас попросить заменить где требуется диск D на диск O, на другой машине попробую
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,817
08.02.2023, 13:02
Просто не отрабатывает или то же сообщение появляется?
Windows Batch file
6
7
if not exist O:\%x% md O:\%x%
move %f% O:\%x%\Группа%x%_%n%_%d:~,8%_%d:~8%.txt
Попробуйте ещё с find у себя:
Windows Batch file
1
2
3
4
5
6
7
@echo off&pushd %~dp0&chcp 1251>nul
@set f=итог.txt
for /f "tokens=2 delims==." %%d in ('wmic os get localdatetime /format:list^|find "="') do @set "d=%%~nd"
for /f "tokens=2 delims==" %%n in ('^<%f% find/i "номер="') do set n=%%n
if %n%==654987 (set x=1) else if %n%==123456 (set x=2) else if %n%==456987 (set x=3) else exit
if not exist D:\%x% md D:\%x%
move %f% D:\%x%\Группа%x%_%n%_%d:~,8%_%d:~8%.txt
0
0 / 0 / 0
Регистрация: 25.12.2022
Сообщений: 29
08.02.2023, 15:01  [ТС]
В принципе не отрабатывает...
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,817
08.02.2023, 15:04
Т. е. с отладочным кодом сообщение перестало появляться?
0
0 / 0 / 0
Регистрация: 25.12.2022
Сообщений: 29
08.02.2023, 15:14  [ТС]
Вот так выглядит скрипт
@echo off&pushd %~dp0&chcp 1251>nul
@set f=итог.txt
for /f "tokens=2 delims==." %%d in ('wmic os get localdatetime /format:list^|find "="') do @set "d=%%~nd"
for /f "tokens=2 delims==" %%n in ('^<%f% find/i "номер="') do set n=%%n
if %n%==654987 (set x=1) else if %n%==123456 (set x=2) else if %n%==456987 (set x=3) else exit
if not exist O:\%x% md O:\%x%
move %f% O:\%x%\Группа%x%_%n%_%d:~,8%_%d:~8%.txt
Он просто моргает и ничего не записывая в лог закрывается.

При этом на диске "О" размещен в одном месте данный батник и файл "итог.txt" (в котором строка "Номер=654987")

Добавлено через 7 минут
При скрипте
@echo off
pushd %~dp0
chcp 1251>nul
set f=итог.txt

if not exist %f% (
echo Рядом с %~nx0 нет файла %f%^!
pause
exit
)

for /f "tokens=2 delims==" %%d in (
'wmic os get localdatetime /format:list'
) do set "d=%%~nd"

if not defined d (
echo Проблема получения даты через wmic^!
pause
exit
)

for /f "tokens=2 delims==" %%n in (
'^<%f% find/i "номер="'
) do set n=%%n

if not defined n (
echo Проблема получения номера из файла. Проверьте кодировку %f%^!
pause
exit
)


if %n%==654987 (
set x=1
) else (
if %n%==123456 (
set x=2
) else (
if %n%==456987 (
set x=3
) else (
exit
)
)
)

if not exist O:\%x% md O:\%x%
move %f% O:\%x%\Группа%x%_%n%_%d:~,8%_%d:~8%.txt

Аналогично

Добавлено через 30 секунд
тестирую с диском О на другой машине

Добавлено через 21 секунду
Чего я делаю не так?
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,817
08.02.2023, 15:43
Распакуйте папку из приложенного архива и выполните батник из неё. Какой будет результат?
Вложения
Тип файла: zip test.zip (701 байт, 2 просмотров)
0
0 / 0 / 0
Регистрация: 25.12.2022
Сообщений: 29
10.02.2023, 12:56  [ТС]
Приветствую! Прошу прощения, что не сразу ответила. Да, всё работает, папка создаётся, файл переименовываясь перемещается. Это я чего-то не так делала.
Спасибо огромное! Отличной Вам пятницы

Добавлено через 1 час 1 минуту
Ан нет, простите, рано попрощалась)) ещё вопросы по "красивостям", если позволите.

1. Как сделать так, чтобы скрипт не открывал перемещаемый файл? Сейчас он его открывает.
2. Если нам не потребуется перемещать файлы после переименования в подпапки с подгруппами (попросили оставлять их там же просто переименовывания), конец скрипта как поправить?
3. Возможно ли добавить строку, которая позволит работать батнику в фоновом режиме (т.е. не сработал и закрылся, а "висел" в фоновом режиме до появления следующего файла для переименования)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2023, 12:56

Копирование файла с добавлением текущей даты к имени файла
Просто копирую файл XCOPY D:\BACKUP\base.bak E:\BACKUP\*.* /Y - норм... Мне нужно не заменять файл в месте назначения..., добавить...

Создайте командный файл, рассчитывающий дату на день раньше текущей
Создайте командный файл, рассчитывающий дату на день раньше текущей echo off set day=%date:~0,2% if %day% GTR 2 ( SET /a...

Разработать командный файл, который бы выводил на экран определение понятия «Командный файл»
Разработать командный файл, который бы выводил на экран определение понятия «Командный файл».

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

Командный файл: дописывать в файл текст, удалять строки
Разработать командный файл, который в интерактивном режиме (командный файл «задает вопросы», а пользователь на них отвечает) мог бы ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru