Войти

Показать полную графическую версию : Изменить txt файл с помощью .bat


Страниц : [1] 2

drkrol
28-03-2012, 20:37
Искал в инете, но не нашел.Нужно в середине .txt файла изменить текст с помощью .bat.Подскажите пожалуйста код?

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

drkrol
28-03-2012, 21:23
А можно что бы еще и .txt файл искал?

drkrol
29-03-2012, 15:02
Мне нужно так что бы батник нашел .txt файл а потом изменил его.Такое возможно?

freese
29-03-2012, 15:53
drkrol, http://forum.oszone.net/thread-183864.html

drkrol
29-03-2012, 22:15
1.А можно что бы он изменял а не создавал новый файлы с текстом
2.Как мне сопоставить поиск с изменением?

Iska
30-03-2012, 10:16
1.А можно что бы он изменял а не создавал новый файлы с текстом »
drkrol, используйте внешние утилиты. Воспользовавшись поиском по разделу, Вы найдёте как их наименования, так и примеры использования.

drkrol
30-03-2012, 19:09
Как мне объединить эти 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
drkrol, не вижу кода в приведённом Вами тексте (подсказка: код на форуме оформляется тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code)).

drkrol
31-03-2012, 09:03
Это так принципиально?Хочу скзать.Когда я первый раз в тег CODE заводил он у меня так же как и тогда в строчку был...

Вот я изменил

Foreigner
31-03-2012, 09:36
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
какой текст он ищет и какой изменяет????мне нужно config и replace и почему .tmp???

Foreigner
31-03-2012, 10:24
какой текст он ищет и какой изменяет???? »
"old old old" на "new new new"

drkrol
31-03-2012, 11:16
1)
Было так:
123
123
old old old
123
Становится так:
123123new new new123

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

Foreigner
31-03-2012, 11:21
drkrol,
У меня все нормально.
2)Появляется замок на blabla.txt...
wtf? Это все не проблемы батника. Ищите что у вас не так.

drkrol
31-03-2012, 11:32
Foreigner, А что делать если нужно MaxShLimit=0 поменять на MaxShLimit=500?
0 на 500 менять нельзя.Там очень много нулей....

Foreigner
31-03-2012, 11:58
А что делать если нужно 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
Это так принципиально? »
Принципиально, коллега.

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

Akella2007
06-12-2017, 17:39
Подскажите, как такое реализовать?

Есть текстовый файл 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
Akella2007, ничего в пакетном файле менять не нужно, просто передавайте ему потребное аргументом пакетного файла, именно оно и будет подставлено в момент выполнения вместо формального параметра %1.

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




© OSzone.net 2001-2012