Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Изменить txt файл с помощью .bat (http://forum.oszone.net/showthread.php?t=231523)

drkrol 28-03-2012 20:37 1888783

Изменить txt файл с помощью .bat
 
Искал в инете, но не нашел.Нужно в середине .txt файла изменить текст с помощью .bat.Подскажите пожалуйста код?

ferget 28-03-2012 20:44 1888790

вот тут код, заменяет в любом месте файла
http://forum.oszone.net/thread-231201.html

drkrol 28-03-2012 21:23 1888817

А можно что бы еще и .txt файл искал?

drkrol 29-03-2012 15:02 1889307

Мне нужно так что бы батник нашел .txt файл а потом изменил его.Такое возможно?

freese 29-03-2012 15:53 1889370

drkrol, http://forum.oszone.net/thread-183864.html

drkrol 29-03-2012 22:15 1889626

1.А можно что бы он изменял а не создавал новый файлы с текстом
2.Как мне сопоставить поиск с изменением?

Iska 30-03-2012 10:16 1889826

Цитата:

Цитата drkrol
1.А можно что бы он изменял а не создавал новый файлы с текстом »

drkrol, используйте внешние утилиты. Воспользовавшись поиском по разделу, Вы найдёте как их наименования, так и примеры использования.

drkrol 30-03-2012 19:09 1890256

Как мне объединить эти 2 кода?
Код:

DIR /b/s/a-d C:\blablabla.txt

Set infile=blablabla.txt
Set find=config
Set replace=Replace
setlocal enabledelayedexpansion
for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set LINE=!LINE:%find%=%replace%!
@echo !LINE!>>2.txt
)
endlocal
del blablabla.txt
ren  2.txt blablabla.txt


Iska 31-03-2012 05:56 1890498

drkrol, не вижу кода в приведённом Вами тексте (подсказка: код на форуме оформляется тэгом [code]).

drkrol 31-03-2012 09:03 1890530

Это так принципиально?Хочу скзать.Когда я первый раз в тег CODE заводил он у меня так же как и тогда в строчку был...

Вот я изменил

Foreigner 31-03-2012 09:36 1890544

drkrol,
Код:

@echo off
setlocal

for /f "tokens=*" %%i in (' dir /b /s /a-d C:\blabla.txt ') do set "file=%%i"

for /f "tokens=*" %%i in (' type "%file%" ') do call:replace "%%i"
move blabla.tmp "%file%"
goto:eof

:replace
set "line=%~1"
1>>blabla.tmp echo %line:old old old=new new new%

Но это не лучший способ для обработки текстовых файлов, имхо.

drkrol 31-03-2012 09:57 1890556

какой текст он ищет и какой изменяет????мне нужно config и replace и почему .tmp???

Foreigner 31-03-2012 10:24 1890562

Цитата:

Цитата drkrol
какой текст он ищет и какой изменяет???? »

"old old old" на "new new new"

drkrol 31-03-2012 11:16 1890589

1)
Было так:
123
123
old old old
123
Становится так:
123123new new new123

2)Появляется замок на blabla.txt...

Foreigner 31-03-2012 11:21 1890594

drkrol,
У меня все нормально.
Цитата:

2)Появляется замок на blabla.txt...
wtf? Это все не проблемы батника. Ищите что у вас не так.

drkrol 31-03-2012 11:32 1890602

Foreigner, А что делать если нужно MaxShLimit=0 поменять на MaxShLimit=500?
0 на 500 менять нельзя.Там очень много нулей....

Foreigner 31-03-2012 11:58 1890610

Цитата:

Цитата drkrol
А что делать если нужно MaxShLimit=0 поменять на MaxShLimit=500? »

Сразу бы написал, что тебе надо исправлять ini-файл. Для этого данное решение совсем не подходит, попробуй исправить:
Код:

.....

:replace

1>nul 2>&1 set %1
if "%MaxShLimit%" equ "500" (1>>blabla.tmp echo MaxShLimit=0) else (1>>blabla.tmp echo %~1)

for /f "tokens=1 delims==" %%i in (%1) do 1>nul 2>&1 set "%%i="


Iska 31-03-2012 13:58 1890673

Цитата:

Цитата drkrol
Это так принципиально? »

Принципиально, коллега.

читать дальше »
1. Явно видны границы кода, где начало, где конец.
2. Код сохраняется «как есть» (есть некоторые исключения, но это детали).
3. Текст в тэге «code» оформляется моноширинным шрифтом (а, при указании языка — и с раскраской); в теле же поста текст оформлен пропорциональным шрифтом.

Akella2007 06-12-2017 17:39 2782789

Подскажите, как такое реализовать?

Есть текстовый файл file.bat, в котором одна или более строк.
В конечном итоге имя исходного файла не должно меняться.

Среди строк файла file.bat есть вот такая строка:
Код:

copy %1 \\admincheg\share
а вот другое ничего меняться не должно, т.к. на разных ПК разные файлы (с разным содержимым).

Именно и только %1 нужно поменять на новое значение.
Вот новое значение
Код:

%UserProfile%\Downloads\txt.txt
В итоге должно получиться:
Код:

copy %UserProfile%\Downloads\txt.txt \\admincheg\share
Код:

Set infile=file.bat
Set find="%1"
Set replace=%UserProfile%\Downloads\txt.txt

setlocal enabledelayedexpansion
for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set LINE=!LINE:%find%=%replace%!
@echo !LINE!>>file.bat
)
endlocal

в итоге получаю в файле ещё одну строку "copy %1 \\admincheg\share" т.е. теперь уже 2 одинаковые строки

Iska 06-12-2017 18:00 2782792

Akella2007, ничего в пакетном файле менять не нужно, просто передавайте ему потребное аргументом пакетного файла, именно оно и будет подставлено в момент выполнения вместо формального параметра %1.

Код:

file.bat "%UserProfile%\Downloads\txt.txt"

Akella2007 07-12-2017 09:15 2782896

Мне нужно работать с Firefox, а Firefox не умеет передавать входящие параметры из-за ограничений безопасности в NativeMessaging.

Ещё есть вариант
Код:

powershell -Command "(gc file.bat) -replace '%1', '%UserProfile%\Downloads\txt.txt' | Out-File file.bat"
но в итоге происходит какая-то циклическая замена и в результирующем файле очень длинная строка:
Цитата:

C:\Users\user777\Downloads\txt.txtcC:\Users\user777\Downloads\txt.txtoC:\Users\user777\Downloads\txt .txtpC:\Users\user777\Downloads\txt.txt .......


Время: 19:52.

Время: 19:52.
© OSzone.net 2001-