CMD/BAT - [решено] Вставить слово между текстом
-
minutka15
CMD/BAT - [решено] Вставить слово между текстом
Всем доброго дня
Имеется текстовый файл такого порядка:
1=имя
2=имя
3=имя
и так далее..
Как вставить слово между - например:
1=слово\имя
2=слово\имя
3=слово\имя
То есть нужно вставить одно и тоже слово после =
В начало и в конец строки я могу, но как добавить слово между ?
Буду благодарен за помощь!
Имеется текстовый файл такого порядка:
1=имя
2=имя
3=имя
и так далее..
Как вставить слово между - например:
1=слово\имя
2=слово\имя
3=слово\имя
То есть нужно вставить одно и тоже слово после =
В начало и в конец строки я могу, но как добавить слово между ?
Буду благодарен за помощь!
-
megaloman
Re: CMD/BAT - [решено] Вставить слово между текстом
Код:
Код: Выделить всё
@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 - [решено] Вставить слово между текстом
megaloman
А можно сделать одно действие если в тексте "постоянный справочник.txt" имеется например такое имя:
1=_Саша
Когда такое имя которое начинается с символом _имя выпадет в "непостоянный файл.txt" то мы просто создаем текстовый файл _имя.txt в той же папке.
и это имя не вносим в преобразованный файл.
А можно сделать одно действие если в тексте "постоянный справочник.txt" имеется например такое имя:
1=_Саша
Когда такое имя которое начинается с символом _имя выпадет в "непостоянный файл.txt" то мы просто создаем текстовый файл _имя.txt в той же папке.
и это имя не вносим в преобразованный файл.
-
megaloman
Re: CMD/BAT - [решено] Вставить слово между текстом
Вот еще вариант. Примеры файлов из предыдущего поста.
Код: Выделить всё
@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 - [решено] Вставить слово между текстом
megaloman,
С первого раза заработало! Супер!
Все коды с заменой текста перелопатил но все они не подходили в случае с '='
Либо была ошибка либо вообще ничего.
Спасибо огромное! пойду дальше ковырять.
С первого раза заработало! Супер!
Все коды с заменой текста перелопатил но все они не подходили в случае с '='
Либо была ошибка либо вообще ничего.
Спасибо огромное! пойду дальше ковырять.
-
minutka15
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
Все на столько четко что я и не ожидал!
Но есть одна загвоздка и вот какая:
Дело в том, что генерируемый текст не совпадает с постоянным из-за:
1=первое_имя
2=второе_имя
3=третье_имя
Потому, что Х=имя не будет под таким же номером как в постоянном.
К примеру постоянный номер у 85= в генерируемом может стать 14= или какой угодно.
В общем я удалил в обоих текстах все "1= 2= 3= и тд." и оставил только названия.
И вот запуская батник все делается точь в точь как я и хотел!
Подводя итоги - Батник нужно переделать с учетом изменений:
1) Подготавливаю постоянный файл без "1= 2= 3="
2) Запуском скрипта из непостоянного файла нужно удалить все "Х=" и затем скрипт продолжает свою работу.
3) По завершению пронумеровываем обратно как должно быть в окончательном варианте то есть 1= 2= 3= и тд.
Третье действие я смогу припаять самостоятельно.
Осталось недоделанным 2е действие по удалению 1= 2= 3= из генерируемого.txt (по другому никак нельзя он только так и генерируется)
Признаюсь в своей безграмотности, самостоятельно с этой задачей я бы не справился никогда.
@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 - [решено] Вставить слово между текстом
Код:
Код: Выделить всё
@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 - [решено] Вставить слово между текстом
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 }"
..
Отлично!
А можно подкорректировать батник таким образом что-бы в последнем действии добавлялось то что я описывал в своем самом первом посту + 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 - [решено] Вставить слово между текстом
Код:
Пример файлов
[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
Код: Выделить всё
@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 - [решено] Вставить слово между текстом
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 }"
..
Отлично!
А можно подкорректировать батник таким образом что-бы в последнем действии добавлялось то что я описывал в своем самом первом посту + 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 }"
..