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

Аватара пользователя
minutka15

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

Сообщение minutka15 »

Всем доброго дня

Имеется текстовый файл такого порядка:

1=имя

2=имя

3=имя

и так далее..



Как вставить слово между - например:

1=слово\имя

2=слово\имя

3=слово\имя

То есть нужно вставить одно и тоже слово после =

В начало и в конец строки я могу, но как добавить слово между ?

Буду благодарен за помощь!
Аватара пользователя
megaloman

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

Сообщение megaloman »

Код:

Код: Выделить всё

@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
Аватара пользователя
minutka15

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

Сообщение minutka15 »

megaloman

А можно сделать одно действие если в тексте "постоянный справочник.txt" имеется например такое имя:



1=_Саша



Когда такое имя которое начинается с символом _имя выпадет в "непостоянный файл.txt" то мы просто создаем текстовый файл _имя.txt в той же папке.

и это имя не вносим в преобразованный файл.
Аватара пользователя
megaloman

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

Сообщение megaloman »

Вот еще вариант. Примеры файлов из предыдущего поста.

Код: Выделить всё

@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
Аватара пользователя
minutka15

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

Сообщение minutka15 »

megaloman,

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



Все коды с заменой текста перелопатил но все они не подходили в случае с '='

Либо была ошибка либо вообще ничего.

Спасибо огромное! пойду дальше ковырять.
Аватара пользователя
minutka15

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

Сообщение minutka15 »

Цитата 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
CMD/BAT - [решено] Вставить слово между текстом




Все на столько четко что я и не ожидал!

Но есть одна загвоздка и вот какая:

Дело в том, что генерируемый текст не совпадает с постоянным из-за:

1=первое_имя

2=второе_имя

3=третье_имя



Потому, что Х=имя не будет под таким же номером как в постоянном.

К примеру постоянный номер у 85= в генерируемом может стать 14= или какой угодно.

В общем я удалил в обоих текстах все "1= 2= 3= и тд." и оставил только названия.

И вот запуская батник все делается точь в точь как я и хотел!

Подводя итоги - Батник нужно переделать с учетом изменений:



1) Подготавливаю постоянный файл без "1= 2= 3="

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

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



Третье действие я смогу припаять самостоятельно.

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



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

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

Сообщение 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
Аватара пользователя
minutka15

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

Сообщение minutka15 »

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 }"

..
Аватара пользователя
megaloman

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

Сообщение megaloman »

Код:

Код: Выделить всё

@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 Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B




Пример файлов

[spoiler]Цитата "непостоянный файл.txt" :[/spoiler]



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
Аватара пользователя
minutka15

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

Сообщение minutka15 »

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 }"

..
Ответить

Вернуться в «Скриптовые языки администрирования Windows»