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

Компьютерный форум 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


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

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


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

	>nul 2>&1 Find "=%WordIn%"  "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
	>nul 2>&1 Find "=%WordInChm%" "%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 (Call :Out "%%i" "%%j")
	))
 	>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B

:Out
	>nul FindStr /I /B /C:"%~2%Chm% " /C:"%~2 " "%Fsprav%"||(<nul Set /P Str=%~1=%~2&Echo.&Exit /B 0)
	>nul FindStr /I /B "%~2%Chm% " "%Fsprav%"&&(<nul Set /P Str=%~1=%WordInChm%&FindStr /I "%~2%Chm% " "%Fsprav%"&Exit /B 0)
	>nul FindStr /I /B "%~2 " "%Fsprav%"&&(<nul Set /P Str=%~1=%WordIn%&FindStr /I "%~2 " "%Fsprav%"&Exit /B 0)
Exit /B

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

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

Отправлено: 13:23, 05-12-2022 | #21



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

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


Аватара для minutka15

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


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

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


megaloman

Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\run.ini"
	Set "Fsprav=Z:\Box_In\setup.ini"
	Set "WordInExe={src}\"
	Set "WordInMsi=msiexec.exe /i {src}\"

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

	FOR /F "usebackq tokens=1* delims= " %%i In ("%Fsprav%") DO (
		If /I "%%~xi"==".exe" Set "%%i=%WordInExe%%%i %%j"  
		If /I "%%~xi"==".msi" Set "%%i=%WordInMsi%%%i %%j"  
	)
	Set /A N=1000000
	(Set /P @@@1000000=<"%FileIn%")
	FOR /F "usebackq skip=1 tokens=1* delims==" %%i In ("%FileIn%") DO (
		Call Set /A N+=%%i
		Call Set "@@@%%N%%=%%i=%%%%j%%"
		Call :Missing "%%%%j%%" "@@@%%N%%" "%%i=%%j" 
	)
	>"%FileIn%" (FOR /F "usebackq tokens=1* delims==" %%i In (`Set "@@@"`) DO Echo %%j)
pause
Exit /B

:Missing
	If "%~1"=="" (Set %~2=%~3)
Exit /B
Мне этот скрипт который вы написали подходит на все 100%
Огромная вам благодарность за проделанную работу!
С уважением!

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


Отправлено: 19:43, 05-12-2022 | #22


Ветеран


Contributor


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

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


Перепевка этого скрипта
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\run.ini"
	Set "Fsprav=Z:\Box_In\setup.ini"

rem	Set "WordInExe={src}\"
	Set "WordInExe=Start /W "

rem	Set "WordInMsi=msiexec.exe /i {src}\"
	Set "WordInMsi=Start /W msiexec.exe /i "

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

	FOR /F "usebackq tokens=1* delims= " %%i In ("%Fsprav%") DO (
		If /I "%%~xi"==".exe" Set "%%i=%WordInExe%%%i %%j"  
		If /I "%%~xi"==".msi" Set "%%i=%WordInMsi%%%i %%j"  
	)
	Set /A N=1000000
	(Set /P @@@1000000=<"%FileIn%")
	FOR /F "usebackq skip=1 tokens=1* delims==" %%i In ("%FileIn%") DO (
		Call Set /A N+=%%i
		Call Set "@@@%%N%%=%%%%j%%"
		Call :Missing "%%%%j%%" "@@@%%N%%" "%%i=%%j" 
	)
	
	>"%FileIn%" (
		Call :Begin
		FOR /F "usebackq tokens=1* delims==" %%i In (`Set "@@@"`) DO (Echo %%j)
		Call :End
	)
pause
Exit /B

:Missing
	If "%~1"=="" (Set %~2=)
Exit /B

:Begin
	(Echo What animal can jump)
	(Echo higher than a house?)
Exit /B

:End
	(Echo Any animal.)
	(Echo Houses can't jump.)
Exit /B

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


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


Аватара для minutka15

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


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

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


megaloman
Спасибо, но я никак понять не могу, для чего такая перепевка скрипта если мы изначально можем вставить то что хотим ???
Единственное что делает скрипт так это меняет Set WordInExe, Set WordInMsi с одного имени на другое.
Задача ведь была другая, а именно убрать нумерацию рождаемого файла, там где получали:
1=Start /W SetupName.exe -y
чтобы стало
Start /W SetupName.exe -y
То есть добавление в прошлый скрипт команды на удаление всех 1=, 2=, 3=

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


Отправлено: 14:24, 11-12-2022 | #24


Ветеран


Contributor


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

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


Цитата minutka15:
Спасибо, но я никак понять не могу, для чего такая перепевка скрипта если мы изначально можем вставить то что хотим ??? »
Цитата minutka15:
Задача ведь была другая, а именно убрать нумерацию рождаемого файла, там где получали: »
Возвращаемся к постановке:
Что дано? Если это результат отработки предыдущего скрипта, зачем нужен костыль для убирания нумерации?
Если исходный файл как в начальной постановке, то лучше сделать сразу требуемое без промежуточных костылей.
Не плодите новые сущности без крайней необходимости.
Костыль
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=Z:\Box_In\run.ini.1.txt"
	Set /A N=1000000
	FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
		Call Set /A N+=1
		Set "Name=%%i"
		If "%%j"=="" (Call Set @@@%%N%%=%%i) Else (Call Set @@@%%N%%=%%j)
	)
	>"%FileIn%" (FOR /F "usebackq tokens=1* delims==" %%i In (`Set "@@@"`) DO Echo %%j)
pause
Exit /B

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


Отправлено: 16:52, 11-12-2022 | #25


Аватара для minutka15

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


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

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


megaloman,
Спасибо батник очищает от 1= как раз что было нужно
Можно сделать один батник вместо двух чтобы изначально получалось без 1= ?
Да еще одно но..
если прописать так - Set "WordInExe=RunProgram="" то батник молчит, то есть дополнительный символ " как бы не переносится.

А в позапрошлом скрипте #17 переносится все что пропишешь.
Лучше скрипт #17 модифицировать как окончательный вариант и я решил бы все проблемы.

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


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


Ветеран


Contributor


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

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


Цитата minutka15:
Можно сделать один батник вместо двух чтобы изначально получалось без 1= ? »
Не могу понять, чем вот этот скрипт, который всё делает, Вас не устроил

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


Отправлено: 19:25, 11-12-2022 | #27


Аватара для minutka15

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


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

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


megaloman
С тем скриптом нет возможности передавать такие" значения.
Если на выходе делать батник то он пойдет т.к. мы передаем start /w без специальных символов.
В случае если на выходе иметь конфиг для 7z sfx то нам нужно передать слово с символом RunProgram=" и скрипт не работает.
С прошлым скриптом все получается.
Собрал таким образом, вроде бы работает:
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=run.txt"
	Set "Fsprav=setup.ini"
	Set "WordIn=RunProgram=""
	Set "WordIn_=RunProgram=""

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

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

	Set /A N=1000000
	FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
		Call Set /A N+=1
		Set "Name=%%i"
		If "%%j"=="" (Call Set @@@%%N%%=%%i) Else (Call Set @@@%%N%%=%%j)
	)
	>"%FileIn%" (FOR /F "usebackq tokens=1* delims==" %%i In (`Set "@@@"`) DO Echo %%j)
Exit /B
В данном случае на выходе будет конфиг для сборки 7z sfx
команды идут в таком порядке
RunProgram="имя-установщика.exe -y"
осталось допилить начало и конец

Спасибо за помощь !!!!

P.S Мне на самом верху рожденного файла нужно добавить 4 строчки не затрагивая сам текст
первую я добавляю так:
Код: Выделить весь код
powershell "Get-ChildItem run.txt | ForEach-Object { $f=$_ | Get-Content -ReadCount 0; $f[0]=';!@Install@!UTF-8!'; Set-Content $_.FullName $f }"
Но когда я начинаю добавлять вторую третью -ReadCount 0; $f[1]='; -ReadCount 0; $f[2]='; то строки переписываются.
Как этого избежать?
Первая строка в обязательном порядке должна быть на самом верху, а остальные три можно подсунуть в конец списка...

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


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


Отправлено: 20:09, 11-12-2022 | #28



Компьютерный форум 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




 
Переход