Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
N11ghtmare
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 15
1

Батник на поиск текста и переименования файла

20.06.2017, 11:40. Просмотров 960. Ответов 28
Метки нет (Все метки)

Привет всем,
Прошу помощи в решении задачи.


Задача :
есть файлы появляющиеся в папке primer с разными именами C:\primer\12345.txt в середине первой строке которых есть слово name= после которого нужно скопировать 10 знаков ( пример name=1234567890) и переименовать файл 12345.txt в найденный результат и получится 1234567890.txt

Благодарю за любую помощь.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2017, 11:40
Ответы с готовыми решениями:

Батник для переименования файла
Добрый день, помогите сделать батник. Батник должен переименовывать файл,...

Батник переименования
Помогите пожалуйста, мне нужен батник переименования. Есть папки в них от одной...

Как написать батник для переименования архива?
Доброго времени суток! Ребята всю голову сломал. В общем имеем папку ну скажем...

Батник на поиск файла в сети
Подскажите, как оформить батник на поиск конкретного файла в сети в расшаренных...

Батник переименования файлов и "SetLocal и расширенная обработка команд"
Здравствуйте. пишу код переименования файлов. не могу разобраться с...

28
volodin661
1834 / 892 / 151
Регистрация: 10.12.2013
Сообщений: 3,032
20.06.2017, 18:08 2
Цитата Сообщение от N11ghtmare Посмотреть сообщение
Благодарю за любую помощь.
Вот, извольте-с решение с помощью текстового редактора vim:
файл process.vim
Код
if search('name\s*=\s*','e') > 0
  normal w"a10yl
  call writefile(getline(1,"$"), @a . '.txt')
endif
вызов:
Windows Batch file
1
2
@vim -S process.vim +q! 12345.txt
::@del 12345.txt
0
N11ghtmare
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 15
21.06.2017, 09:07  [ТС] 3
volodin661, Спасибо за ответ, но нужно штатными средствами windows, без стороннего ПО
0
alpap
1499 / 1202 / 396
Регистрация: 26.04.2015
Сообщений: 4,238
21.06.2017, 10:35 4
Цитата Сообщение от N11ghtmare Посмотреть сообщение
файлы появляющиеся
по последнему созданному файлу произойдет переименование указанного файла
Windows Batch file
1
2
3
4
5
6
@echo off
set "zadan=C:\12345.txt"
set "Papka_f=C:\primer"
for /f "tokens=2 delims==" %%a in ('2^>nul dir /a-d/b/od/tc "%Papka_f%\*.txt"') do set "sname=%%~na"
ren "%zadan%" "%sname%.txt"
pause
0
N11ghtmare
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 15
21.06.2017, 12:01  [ТС] 5
alpap, спасибо за ответ но в вашем примере батник обрабатывает только файл с именем 12345.txt а в папке так же появляются и с другим именем файлы пример -> 123456.txt, 123ab5.txt

так же сам файл переименовался просто в .txt не взяв из файла 10 знаков после слова имя ( пример name="1234567890" )
для упрощения или усложнения не знаю, эти цифры стоят в кавычках

Добавлено через 6 минут
я пытаюсь найти слово, получается, потом даже уже получается достать символы в кавычках но это все применяется только для файла 12345.txt как применить ко всем файлам txt в определенной папке?

делаю примерно так :

Windows Batch file
1
2
3
4
5
set slovo=abcd
set fileg=12345.txt
set filelog=result.log
echo false >%filelog%
for /f %%s in ('find "%slovo%" %fileg%') do @if "%%s"=="%slovo%" echo %slovo% >%filelog%
Добавлено через 14 минут
Рабочая версия

в этой версии уже беру информацию после слово ИмяФайлаНум="FDFGDDD-2324-12345"

как сделать чтобы проверялись все файлы в определенной папке C:\primer а не только конкретный файл 3.txt

Windows Batch file
1
2
3
4
5
6
7
@echo off
SetLocal EnableExtensions
 
set file=3.txt
set dest=out.txt
 
For /F tokens^=2^ delims^=^"^" %%? in ('find "ИмяФайлаНум=" ^< "%file%"') do echo %%?>> "%dest%"
0
alpap
1499 / 1202 / 396
Регистрация: 26.04.2015
Сообщений: 4,238
21.06.2017, 12:52 6
N11ghtmare,
чтобы я ОЧЕНЬ СИЛЬНО не ругался:
- небольшой список имен появляющихся файлов
- принцип переименования каков (какие-то файлы допустим есть в папке А, появился файл в папке B, берем из него часть имени и переименовываем файл (КАКОЙ? Первый, последний ...) из папки А)
- если файл с таким именем уже есть - действия?
0
N11ghtmare
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 15
21.06.2017, 14:36  [ТС] 7
alpap, пасиб за помощь постараюсь выразить мысль полностью =)

Есть Папка D:\PRIMER\ -> в нее прилетают абсолютно с разными именами файлы с одним расширением txt

в каждом файле txt внутри есть текст -> : всем привет как дела вот название ИмяФайлаНум="4566-f342-d56673"

нужно взять вот это 4566-f342-d56673 и переименовать файл в этот параметр.

пример D:\PRIMER\ <- в этой папке файлы 12345.txt, вася2345.txt, qwerty4333456.txt и другие с разными именами за ранее не известными

в каждом файле будет уникальное имя в содержании ИмяФайлаНум="4566-f342-d56673"

файл 12345.txt содержит -> всем привет как дела вот название ИмяФайлаНум="4566-f342-d56673"
файл вася2345.txt содержит ->всем привет как дела вот название ИмяФайлаНум="6644-2222-abcdef"
файл qwerty4333456.txt содержит-> всем привет как дела вот название ИмяФайлаНум="6644-1111-d56673"

в итоге файл 12345.txt должен переименоваться в 4566-f342-d56673.txt
файл файл вася2345.txt должен переименоваться в 6644-2222-abcdef.txt
файл qwerty4333456.txt должен переименоваться в 6644-1111-d56673.txt

вот так =)

Добавлено через 1 минуту
Цитата Сообщение от alpap Посмотреть сообщение
- если файл с таким именем уже есть - действия?
перезаписывать поверх такого же, но это исключено так как все файлы 99% уникальны
0
ZoOoO
181 / 176 / 57
Регистрация: 09.02.2016
Сообщений: 883
21.06.2017, 18:01 8
Лучший ответ Сообщение было отмечено N11ghtmare как решение

Решение

Батник поместить в папку с файлами
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
Setlocal EnableDelayedExpansion
for  %%q in (*.txt) do (
set "m=%%q"
call :1 "!m!"
set n=
)
exit /b
:1
set /a n+=1
for /f "tokens=%n% delims== " %%a in ('findstr /l  "name" "%~1"') do (
if "%%a"=="name" (set /a n+=1 && goto 2)
goto 1
)
:2
for /f "tokens=%n% delims== " %%b in ('findstr /l  "name" "%~1"') do (
set "a=%%b"
set a=!a:"=!
)
ren "!m!" "!a!.txt" 
exit /b
запись имени нового файла выглядит так : name="privet".Если у Вас не так,то надо name в коде батника земенить на свою строку ИмяФайлаНум.Если ИмяФайлаНум написано через пробел,то записать слово которое идет перед знаком ="4566-f342-d56673"(то есть:Имя Файла Нум="4566-f342-d56673",Вам надо Нум )
1
alpap
1499 / 1202 / 396
Регистрация: 26.04.2015
Сообщений: 4,238
21.06.2017, 18:36 9
N11ghtmare,
ну сейчас понятно:
Windows Batch file
1
2
3
4
5
6
7
@echo off
for /f "delims=" %%a in ('2^>nul dir /a-d/b "*.txt"') do <"%%a" set /p s=& call :# "%%a" "%%s%%"
pause& exit
 
:#
 for /f "tokens=1* delims==" %%a in ("%~2") do ren "%~1" "%%~b%~x1"
exit /b
понимаете что bat в этой же папке, иначе прописать путь и переход в нужную папку (например cd /d "C:\Papka")
1
N11ghtmare
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 15
22.06.2017, 15:34  [ТС] 10
ZoOoO, alpap, Большое огромное спасибо вам умные добрые люди =))))

все огонь все работает!

Добавлено через 6 часов 23 минуты
ZoOoO, еще одна проблемка, теперь тоже самое делаю с xml в кодировке UTF-8 и с русским языком беда, тоесть указываю Нум="312312" он файл переименовывает в .xml тоесть не находит этот НУМ, если ставишь на англ то все работает .... куда ковырять? уже с кодировками и так и сяк и никак.

батник сделал в UTF-8 тоже не ищет.
0
ZoOoO
181 / 176 / 57
Регистрация: 09.02.2016
Сообщений: 883
22.06.2017, 16:07 11
Батник надо сохранить в кодировке ,не помню какой.835 вроде.Тогда он будет русский понимать.
0
N11ghtmare
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 15
22.06.2017, 17:26  [ТС] 12
ZoOoO,

Я уже и в UTF-8 и в UTF-8 без BOM и в ANSI и в 866 и 1251

835 не нашел

не рабоает блин, только меняю слово на англ и все сразу отрабатывает может хитрый xml?
<?xml version="1.0" encoding="UTF-8"?>
0
alpap
1499 / 1202 / 396
Регистрация: 26.04.2015
Сообщений: 4,238
22.06.2017, 20:20 13
N11ghtmare,
мой код из п9 переименует невзирая на язык, вам же этот "Нум=" не нужен, какая вообще привязка к нему, если вы используете только то что после?
0
ZoOoO
181 / 176 / 57
Регистрация: 09.02.2016
Сообщений: 883
22.06.2017, 20:59 14
попробуй юатник сохранить в 852
0
N11ghtmare
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 15
23.06.2017, 09:16  [ТС] 15
alpap, дело в том что этот Нум= может стоять в файле и в начале и в конце, поэтому и привязываюсь к нему.

Добавлено через 8 минут
Цитата Сообщение от ZoOoO Посмотреть сообщение
попробуй юатник сохранить в 852
и в ОЕМ 852 тоже не ищет ... может есть способ увидеть какие иероглифы видит батник в самом xml и искать не слово Нум= а эти сами иероглифы, так как во всех файлах слово одинаковое
пробую вообще во всяко разных кодировках ... пока безрезультатно
0
ZoOoO
181 / 176 / 57
Регистрация: 09.02.2016
Сообщений: 883
23.06.2017, 11:07 16
Я конечно не пробывал сам искать в xml,но если сначала скопировать текст батника в нотепад++,а потом выставить 852 кодировку,то русские буквы изменяться на иеролглифы.И их надо будет перезаписывать заново,что бы стало возможно их прочитать.Может быть ты где то в этом плане косячишь,я честно,не знаю.
0
N11ghtmare
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 15
23.06.2017, 11:14  [ТС] 17
Цитата Сообщение от ZoOoO Посмотреть сообщение
Я конечно не пробывал сам искать в xml,но если сначала скопировать текст батника в нотепад++,а потом выставить 852 кодировку, то русские буквы изменяться на иеролглифы.И их надо будет перезаписывать заново, что бы стало возможно их прочитать. Может быть ты где то в этом плане косячишь,я честно,не знаю.
Да в том то и дело именно так и делаю, и именно notepad++. и чистый создавал туда копировал потом выставлял кодировку 852 и просто создавал чистый сразу ставил кодировку 852 а потом вставлял текст батника и менял иэроглефы на слово. и с иероглефами пробывал. не работает ...

даже не знаю куда уже ковырять. Притом так делал уже и с 1250 и 1251 utf8 utf8 - без ROM ANSI .... не работает.
0
ZoOoO
181 / 176 / 57
Регистрация: 09.02.2016
Сообщений: 883
23.06.2017, 11:21 18
Русский текст в консоли
866 кодировка оказывается.
0
DarkChirik
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
23.06.2017, 11:22 19
Если что то я с подобной проблемой сталкивался скачайте редактор notepad++, там есть подходящая кодировка. Как называется не помню, но там интуитивно понятно. Попробуйте у меня работало помню.
0
N11ghtmare
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 15
23.06.2017, 11:32  [ТС] 20
Цитата Сообщение от ZoOoO Посмотреть сообщение
866 кодировка оказывается.
спасиб но уже пробовал

Цитата Сообщение от DarkChirik Посмотреть сообщение
Если что то я с подобной проблемой сталкивался скачайте редактор notepad++, там есть подходящая кодировка. Как называется не помню, но там интуитивно понятно. Попробуйте у меня работало помню.
Цитата Сообщение от N11ghtmare Посмотреть сообщение
Да в том то и дело именно так и делаю, и именно notepad++. и чистый......
0
23.06.2017, 11:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2017, 11:32

Переименования файла из контекстного меню
cmd /c (set /A NAME=&quot;%1_%RANDOM%&quot;) &amp; (move /Y &quot;%1&quot; &quot;%NAME%&quot;) Я хочу с...

Bat`ник для переименования файла
Не могу ни как решить проблему с выводом сообщения. Кто может помогите! Вот...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru