Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Вставить слово между текстом

Ответить
Настройки темы
CMD/BAT - [решено] Вставить слово между текстом

Аватара для minutka15

Пользователь


Сообщения: 135
Благодарности: 11

Профиль | Отправить PM | Цитировать


Всем доброго дня
Имеется текстовый файл такого порядка:
1=имя
2=имя
3=имя
и так далее..

Как вставить слово между - например:
1=слово\имя
2=слово\имя
3=слово\имя
То есть нужно вставить одно и тоже слово после =
В начало и в конец строки я могу, но как добавить слово между ?
Буду благодарен за помощь!

-------
We don't call 911


Отправлено: 13:33, 22-11-2022

 

Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\Имеется текстовый файл такого порядка.txt"
	Set "WordIn=слово\"

    >"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
		If Not "%%j"=="" (Echo %%i=%WordIn%%%j) Else (%%i)
	))
	>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:18, 22-11-2022 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для minutka15

Пользователь


Сообщения: 135
Благодарности: 11

Профиль | Отправить PM | Цитировать


megaloman,
С первого раза заработало! Супер!

Все коды с заменой текста перелопатил но все они не подходили в случае с '='
Либо была ошибка либо вообще ничего.
Спасибо огромное! пойду дальше ковырять.

-------
We don't call 911


Последний раз редактировалось minutka15, 22-11-2022 в 23:14. Причина: трудная задача


Отправлено: 22:45, 22-11-2022 | #3


Аватара для minutka15

Пользователь


Сообщения: 135
Благодарности: 11

Профиль | Отправить PM | Цитировать


У меня есть одна задача с которой мне никак в одиночку не справится.
Не хочу выглядеть как-бы посади его за стол а он и ноги на стол.
в общем если есть время и нервы:

В этом текстовом файле возможны более 200 имен
Есть текстовый файл с примерно вот такой переченью:

1=первое_имя
2=второе_имя
3=третье_имя
4=четвертое_имя
5=пятое_имя
ну и т.д

тут внизу список, мы сами его составили и он меняться не будет тогда как верхний список будет сгенерирован.
Однако получим мы те-же имена с нижнего списка но неизвестно какие и сколько.
ниже этого листа те-же имена но с дополнениями. Дополнительные имена мы тоже знаем.

1=первое_имя +дополнительное слово
2=второе_имя +дополнительное слово
3=третье_имя +дополнительное слово
4=четвертое_имя +дополнительное слово
5=пятое_имя +дополнительное слово

Так вот, задача такая что-бы в верхний список мы добавили +дополнительным словом из нижнего списка
в зависимости какое имя выпало.
Как бы нужно просканировать верхний список с нижним и если он найден добавить к нему дополнительное слово.
Возможно ли решить такую задачу?

-------
We don't call 911


Отправлено: 23:12, 22-11-2022 | #4


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\непостоянный файл.txt"
	Set "Fsprav=Z:\Box_In\постоянный справочник.txt"

	>"%FileIn%.tmp" (FOR /F "usebackq delims=" %%i In ("%FileIn%") DO (
		FindStr /B /I "%%i" "%Fsprav%" ||Echo %%i
	))
	>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:03, 23-11-2022 | #5


Аватара для minutka15

Пользователь


Сообщения: 135
Благодарности: 11

Профиль | Отправить PM | Цитировать


Цитата megaloman:
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
>"%FileIn%.tmp" (FOR /F "usebackq delims=" %%i In ("%FileIn%") DO (
FindStr /B /I "%%i" "%Fsprav%" ||Echo %%i
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B »
Все на столько четко что я и не ожидал!
Но есть одна загвоздка и вот какая:
Дело в том, что генерируемый текст не совпадает с постоянным из-за:
1=первое_имя
2=второе_имя
3=третье_имя

Потому, что Х=имя не будет под таким же номером как в постоянном.
К примеру постоянный номер у 85= в генерируемом может стать 14= или какой угодно.
В общем я удалил в обоих текстах все "1= 2= 3= и тд." и оставил только названия.
И вот запуская батник все делается точь в точь как я и хотел!
Подводя итоги - Батник нужно переделать с учетом изменений:

1) Подготавливаю постоянный файл без "1= 2= 3="
2) Запуском скрипта из непостоянного файла нужно удалить все "Х=" и затем скрипт продолжает свою работу.
3) По завершению пронумеровываем обратно как должно быть в окончательном варианте то есть 1= 2= 3= и тд.

Третье действие я смогу припаять самостоятельно.
Осталось недоделанным 2е действие по удалению 1= 2= 3= из генерируемого.txt (по другому никак нельзя он только так и генерируется)

Признаюсь в своей безграмотности, самостоятельно с этой задачей я бы не справился никогда.

-------
We don't call 911


Отправлено: 01:25, 23-11-2022 | #6


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\непостоянный файл.txt"
	Set "Fsprav=Z:\Box_In\постоянный справочник.txt"

	>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
		<nul Set /P Str=%%i=
		FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
	))
	>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B
Пример файлов
Цитата "непостоянный файл.txt" :
1=Алиса
2=Саша
3=третье_имя
4=dfygt3
5=Сергей
6=ejhgrgej
7=Петя
Цитата "постоянный справочник.txt" :
Аня +дополнительное слово 1
Ася +дополнительное слово 2
Саша +дополнительное слово 3
Вася +дополнительное слово 4
Петя +дополнительное слово 5
Ваня +дополнительное слово 6
Инокентий +дополнительное слово 7
Филипп +дополнительное слово 8
Алиса +дополнительное слово 9
Эллис +дополнительное слово 10
Сергей +дополнительное слово 11
Цитата "непостоянный файл.txt" -преобразованный:
1=Алиса +дополнительное слово 9
2=Саша +дополнительное слово 3
3=третье_имя
4=dfygt3
5=Сергей +дополнительное слово 11
6=ejhgrgej
7=Петя +дополнительное слово 5

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 23-11-2022 в 11:22.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:52, 23-11-2022 | #7


Аватара для minutka15

Пользователь


Сообщения: 135
Благодарности: 11

Профиль | Отправить PM | Цитировать


megaloman,
Отлично!
А можно подкорректировать батник таким образом что-бы в последнем действии добавлялось то что я описывал в своем самом первом посту + pdf ?
То есть где
1=Алиса +дополнительное слово 9
было
1=мое-слово\Алиса.pdf +дополнительное слово 9
мое-слово будет единым для всех имен.
--
Да и вот еще что
в завершенном файле в самом начале получаю

[AllNames]=ђҐ¦Ё¬ ўлў®¤* Є®¬**¤ ** нЄа** (ECHO) ®вЄ«озҐ*.

То есть крякозябры. Дело в том что когда генерируется "непостоянный файл.txt" то в самом верху прописано:
[AllNames]
а ниже
1=имя
2=имя

[AllNames] Должно оставаться нетронутым в самом верху.
Просто предпоследнее действие батника - удаление первой строки и затем добавление первой строки [AllNames]
Решил добавив команду внизу скрипта
powershell "Get-ChildItem непостоянный файл.txt | ForEach-Object { $f=$_ | Get-Content -ReadCount 0; $f[0]='[AllNames]'; Set-Content $_.FullName $f }"
..

-------
We don't call 911


Последний раз редактировалось minutka15, 23-11-2022 в 17:24.


Отправлено: 12:44, 23-11-2022 | #8


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\непостоянный файл.txt"
	Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
	Set "WordIn=слово\"

	>nul 2>&1 Find "=%WordIn%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)

	>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
		If "%%j"=="" (Echo %%i
		) Else (
			<nul Set /P Str=%%i=%WordIn%
			FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
		)
	))
	>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:36, 23-11-2022 | #9


Аватара для minutka15

Пользователь


Сообщения: 135
Благодарности: 11

Профиль | Отправить PM | Цитировать


megaloman
Все что нужно!
Скрипт работает суперски. 140 строк как часики заполнились и везде все как надо !
Вот что значит поддержка мастера.
В моем проекте всегда была эта задача как самая трудная и из за этого я всегда откладывал в надежде найти другой способ.
Но как оказалось все решил этот скрипт.
Без вашей помощи я продолжал бы вынюхивать информацию по различным форумам в надежде найти адекватного специалиста!
Огромная вам благодарность за помощь которую вы мне оказали!

-------
We don't call 911


Отправлено: 17:53, 23-11-2022 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Вставить слово между текстом

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2013 - Как в ворде объединить несколько файлов и между ними вставить горизонтальные линии? megagogo Microsoft Office (Word, Excel, Outlook и т.д.) 0 01-03-2015 14:29
Угадай слово ;) perchinka Флейм 395 05-08-2014 07:33
CMD/BAT - Удалить последнее слово в строке AlekseyB. Скриптовые языки администрирования Windows 15 12-09-2013 10:28
C/C++ - Слово написанное больше всех Vunderkind Программирование и базы данных 10 07-11-2010 20:06
Все знают про обьеденение строк ('слово'&'еще слово'), а есть ли способ исключениеня? tweakos AutoIt 3 15-07-2009 09:52




 
Переход