Войти

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


modzilla
09-10-2017, 19:41
Здравствуйте, интересует вопрос, можно ли bat-ником редактировать Н строку в тексте?

Вот пример файл addy.txt, вот содержимое:

0.0 0 0
248.676865 90912364 53502936

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

Я вообще в этом не разбираюсь и решение для такого в интернете не нашел.

Казбек
09-10-2017, 20:38
решение для такого в интернете не нашел. »

С помощью Power Shell:

How to replace of a specific line number (https://stackoverflow.com/questions/43519871/how-to-replace-of-a-specific-line-number)
Replacing a text at specified line number of a file using powershell (https://stackoverflow.com/questions/6040831/replacing-a-text-at-specified-line-number-of-a-file-using-powershell)

+ Replace text at specific line number with other text using notepad++ (https://superuser.com/questions/1094574/replace-text-at-specific-line-number-with-other-text-using-notepad)

alpap
09-10-2017, 21:08
modzilla,
если никаких спецсимволов в строках нет, то можно так:

@echo off
set "f=addy.txt"
echo Введите строку для замены:
set /p str=
<"%f%">$ (echo %str%& (for /f "delims=" %%a in ('more +1') do @echo %%a))& >nul move $ "%f%"
pause

modzilla
09-10-2017, 22:00
@echo off
set "H:/addy.txt"
echo 248.676865 90912364 53502936:
set /p str=
<"%f%">$ (echo %str%& (for /f "delims=" %%a in ('more +1') do @echo %%a))& >nul move $ "%f%"
pause
переменная среды h:/addy.txt не определена
248.676865 90912364 53502936:

Iska
09-10-2017, 22:03
переменная среды h:/addy.txt не определена »
Сравните:
set "f=addy.txt" »
set "H:/addy.txt" »

modzilla
09-10-2017, 22:19
я понял. исправил, думал то местонахождение должно быть
@echo off
set "f=addy.txt"
echo 301.049835 90414396 30817092:
set /p str=
<"%f%">$ (echo %str%& (for /f "delims=" %%a in ('more +1') do @echo %%a))& >nul move $ "%f%"
pause
не заменяет

Iska
09-10-2017, 22:33
думал то местонахождение должно быть »
Ничто не мешает указать и местонахождение:
set "f=h:\addy.txt"
не заменяет »
Описывайте подробно, что и как делали, что получилось в итоге.

modzilla
09-10-2017, 22:39
в окошке пишет только 301.049835 90414396 30817092: и всё, больше ничего

megaloman
09-10-2017, 23:30
alpap, Если надо заменить только первую строку и если всё равно используется вспомогательный файл, можно и без For, и это надёжнее:@Echo Off

Set "Modify=Z:\Box_In\addy.txt"

Set "$=%Modify%.tmp"
Set /P First=Введите строку для замены:

If Not "%First%"=="" (Echo %First%>"%$%"& More +1 "%Modify%">>"%$%"&&Move /Y "%$%" "%Modify%" >nul 2>&1)
modzilla, Результат смотрите в исходном файла - первая строка заменится, если Вы на запрос ввели строку для замены.

Iska
09-10-2017, 23:32
в окошке пишет только 301.049835 90414396 30817092: и всё, больше ничего »
Это не есть «подробно, что и как делали», коллега.

alpap
10-10-2017, 00:17
в окошке пишет только 301.049835 90414396 30817092: и всё, больше ничего »
правильно

мою строку
echo Введите строку для замены:
вы заменили на
echo 301.049835 90414396 30817092:
я полагал из побуждений того чтобы не забыть что вводить, такая себе шпаргалка.
но теперь есть подозрение, что происходит (как ему и положено) вывод данной строки, а далее идет приглашение на ввод:
set /p str=
но вы ничего не вводите, а консоль-то ждет, надеется ...

megaloman
10-10-2017, 00:24
modzilla, Если строка не вводится ручками, а жестко прописывается в батнике, то вариант:@Echo Off

Set "Modify=Z:\Box_In\addy.txt"
Set "First=301.049835 90414396 30817092:"

Set "$=%Modify%.tmp"

If Not "%First%"=="" (Echo %First%>"%$%"& More +1 "%Modify%">>"%$%"&&Move /Y "%$%" "%Modify%" >nul 2>&1)

modzilla
10-10-2017, 12:29
@Echo Off

Set "Modify=Z:\Box_In\addy.txt"
Set "First=301.049835 90414396 30817092:"

Set "$=%Modify%.tmp"

If Not "%First%"=="" (Echo %First%>"%$%"& More +1 "%Modify%">>"%$%"&&Move /Y "%$%" "%Modify%" >nul 2>&1)
этот вариант - работает если заменить локацию нахождения файла.
СПАСИБО вам огромное




© OSzone.net 2001-2012