CMD/BAT - findstr при записи в тот же файл

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

CMD/BAT - findstr при записи в тот же файл

Сообщение TolikD »

Мне нужно удалить заданную строку в текстовом файле. Конкретно нужно удалить ай пи и перезаписать файл без данной строки.

Судя по ману команды findstr делается это так:



Код:

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

findstr /I /V "192.168.1.101" test.txt

Результат будет вывод файла без искомой строки.

Однако, при добавлении кода с записью в тот же самый файл, текст в файле затирается полностью.

Батник:



Код:

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

findstr /I /V "192.168.1.101" test.txt>test.txt
echo Press any key...
pause > nul

Результат: пустой файл test.txt. Что не так делаю?



PS А при чем тут единичка?



Старый текст темы

[spoiler]Как-то давным давно я уже сталкивался с этой проблемой на семёрке, убил в тот раз целый день и пришлось всё делать через зад. А щас то же самое на ДЕСЯТКЕ!!!

Кто-нибудь мне скажет что тут происходит???



Код:
[/spoiler]

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

findstr /I /V "192.168.1.101" test.txt>test.txt
echo Press any key...
pause > nul

С кодом всё понятно вроде. Здесь командой findstr хочу убрать строку с айпи из файла.

Теперь выполняем батник.



Код:

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

C:\debug\cmdtest>findstr /I /V "192.168.1.101" test.txt 1>test.txt
C:\debug\cmdtest>echo Press any key...
Press any key...
C:\debug\cmdtest>pause  1>nul

Главный вопрос: ОТКУДА ЭТА ЕДИНИЧКА???

В результате он мне затирает текст! Или я отстал от жизни или это фича???
Аватара пользователя
YuS_2

Re: CMD/BAT - findstr при записи в тот же файл

Сообщение YuS_2 »

Цитата TolikD:



С кодом всё понятно вроде. Здесь командой findstr хочу убрать строку с айпи из файла.
CMD/BAT - findstr при записи в тот же файл





Цитата TolikD:



Главный вопрос: ОТКУДА ЭТА ЕДИНИЧКА???

В результате он мне затирает текст! Или я отстал от жизни или это фича???
CMD/BAT - findstr при записи в тот же файл




Главный ответ:

единичка - это числовой эквивалент дескриптора вывода в консоль, который перенаправлен в nul.

Но с кодом, всё же, Вы недопонимаете...



Код:

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

>test_out.txt findstr /ivc:"192.168.1.101" test.txt

при необходимости, файл с выходными данными переименовать
Аватара пользователя
TolikD

Re: CMD/BAT - findstr при записи в тот же файл

Сообщение TolikD »

Зачем? Я и так мог бы наплодить кучу го%нокода и не подымать тему. Дело принципа. И всё можно, вот решение:



Код:

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

for /f "usebackq" %%a in (`findstr /V "192.168.1.101" test.txt`) do (set content=%%a)
echo %content%>test.txt

Всё пашет, тему можно закрыть
Аватара пользователя
YuS_2

Re: CMD/BAT - findstr при записи в тот же файл

Сообщение YuS_2 »

Цитата TolikD:



С кодом всё понятно вроде.
CMD/BAT - findstr при записи в тот же файл




Совсем непонятно.



1. Когда Вы используйте в таком виде вывод в файл в той же команде, которой пытаетесь читать из него — происходит следующее:



Скрытый текст

[spoiler][/spoiler]




В итоге — как видите, Ваша команда радостно пытается читать из уже пустого
файла. Вы обратили внимание, что у коллеги YuS_2 идёт чтение из одного файла, а вывод делается в другой?



2. Единичка в:


Цитата TolikD:





Код:

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

C:\debug\cmdtest>findstr /I /V "192.168.1.101" test.txt 1>test.txt

CMD/BAT - findstr при записи в тот же файл




— это, как уже написал выше коллега YuS_2, просто номер дескриптора стандартного потока вывода, stdout (
Стандартные потоки — Википедия
). Её показывает интерпретатор команд при включённом режиме отображения команд (попросту — когда Вы не использовали echo off). На опустошение файла перед его чтением она никоим образом не влияет и влиять не может.




Цитата YuS_2:



который перенаправлен в nul.
CMD/BAT - findstr при записи в тот же файл




А вот это не понял. Где там nul?!




Цитата TolikD:



Твой код тоже не работает.
CMD/BAT - findstr при записи в тот же файл




Работает.




Цитата TolikD:



Точнее он работает при вводе команды без перенаправления в левый файл, как работает и у меня. А вот в тот же файл почему-то облом.

Пора тему переименовать в разборки с командой findstr...
CMD/BAT - findstr при записи в тот же файл




Объяснение — на скриншоте: в указанном Вами виде файл test.txt сначала обнуляется, и лишь затем идёт попытка чтения из него. findstr.exe тут совершенно не при чём, вместо неё может быть любой исполняемый файл.
Аватара пользователя
Iska

Re: CMD/BAT - findstr при записи в тот же файл

Сообщение Iska »

Ну затирает он вначале и что? Из скриншота я не понял, и хде там решение проблемы?!





Код:

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

echo 123>test.txt

почему не затирается?



точно я отстал от жизни, пора вешаться...
Аватара пользователя
TolikD

Re: CMD/BAT - findstr при записи в тот же файл

Сообщение TolikD »

Цитата Iska:



А вот это не понял. Где там nul?!
CMD/BAT - findstr при записи в тот же файл




здесь:


Цитата TolikD:



C:\debug\cmdtest>pause 1>nul
CMD/BAT - findstr при записи в тот же файл




====================================================




Цитата TolikD:



решение проблемы?!
CMD/BAT - findstr при записи в тот же файл




Какой проблемы? Проблем никаких нет, я ведь Вам написал:


Цитата YuS_2:



при необходимости, файл с выходными данными переименовать
CMD/BAT - findstr при записи в тот же файл




в тот же test.txt с перезаписью...
Аватара пользователя
Iska

Re: CMD/BAT - findstr при записи в тот же файл

Сообщение Iska »

Ну и переименуй... Или я один туплю?





Код:

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

c:\debug\cmdtest>type test.txt
abc
192.168.1.101
c:\debug\cmdtest>>test.txt findstr /ivc:"192.168.1.101" test.txt
c:\debug\cmdtest>type test.txt
c:\debug\cmdtest>
Аватара пользователя
TolikD

Re: CMD/BAT - findstr при записи в тот же файл

Сообщение TolikD »

Цитата TolikD:



Ну затирает он вначале и что?
CMD/BAT - findstr при записи в тот же файл




В общем, в cmd нельзя в одном наборе команд и читать из файла и записывать в него...




Цитата TolikD:



Ну и переименуй
CMD/BAT - findstr при записи в тот же файл




от переименуя и слышу... Изображение

В смысле, тебе надо, ты и переименовывай... где тебя манерам учили?
Аватара пользователя
YuS_2

Re: CMD/BAT - findstr при записи в тот же файл

Сообщение YuS_2 »

Цитата:



В смысле, тебе надо, ты и переименовывай...



Еще раз: изначально переименовал.

При чем тут манеры? в итоге я прав



Ну есть же решение, только без записи в левый файл. Как это сделать ума не приложу...
Аватара пользователя
TolikD

Re: CMD/BAT - findstr при записи в тот же файл

Сообщение TolikD »

Цитата TolikD:



Ну есть же решение, только без записи в левый файл.
CMD/BAT - findstr при записи в тот же файл




чем не устраивает решение:



Код:

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

+ findstr /ivc:"192.168.1.101"&move+ test.txt

?

Религиозные принципы мешают? Изображение
Ответить

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