Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - findstr при записи в тот же файл

Ответить
Настройки темы
CMD/BAT - findstr при записи в тот же файл

Новый участник


Сообщения: 44
Благодарности: 6

Профиль | Отправить PM | Цитировать


Изменения
Автор: TolikD
Дата: 23-08-2018
Описание: покурил перенаправление вывода
Мне нужно удалить заданную строку в текстовом файле. Конкретно нужно удалить ай пи и перезаписать файл без данной строки.
Судя по ману команды 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 А при чем тут единичка?
Старый текст темы
Как-то давным давно я уже сталкивался с этой проблемой на семёрке, убил в тот раз целый день и пришлось всё делать через зад. А щас то же самое на ДЕСЯТКЕ!!!
Кто-нибудь мне скажет что тут происходит???
Код: Выделить весь код
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
Главный вопрос: ОТКУДА ЭТА ЕДИНИЧКА???
В результате он мне затирает текст! Или я отстал от жизни или это фича???

Отправлено: 18:55, 23-08-2018

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата TolikD:
С кодом всё понятно вроде. Здесь командой findstr хочу убрать строку с айпи из файла. »
Цитата TolikD:
Главный вопрос: ОТКУДА ЭТА ЕДИНИЧКА???
В результате он мне затирает текст! Или я отстал от жизни или это фича??? »
Главный ответ:
единичка - это числовой эквивалент дескриптора вывода в консоль, который перенаправлен в nul.
Но с кодом, всё же, Вы недопонимаете...
Код: Выделить весь код
>test_out.txt findstr /ivc:"192.168.1.101" test.txt
при необходимости, файл с выходными данными переименовать

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:12, 23-08-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 44
Благодарности: 6

Профиль | Отправить PM | Цитировать


Привет!
У меня было мнение, что причина в единичке, якобы команда определяет лишний символ в параметрах. Но похоже что проблема глубже...
Ну так и что? Тема сводится к обсуждению как убрать строку с айпи? Твой код тоже не работает. Точнее он работает при вводе команды без перенаправления в левый файл, как работает и у меня. А вот в тот же файл почему-то облом.
Пора тему переименовать в разборки с командой findstr...

Отправлено: 19:38, 23-08-2018 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата TolikD:
С кодом всё понятно вроде. »
Совсем непонятно.

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

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

2. Единичка в:
Цитата TolikD:
Код: Выделить весь код
C:\debug\cmdtest>findstr /I /V "192.168.1.101" test.txt 1>test.txt
»
— это, как уже написал выше коллега YuS_2, просто номер дескриптора стандартного потока вывода, stdout (Стандартные потоки — Википедия). Её показывает интерпретатор команд при включённом режиме отображения команд (попросту — когда Вы не использовали echo off). На опустошение файла перед его чтением она никоим образом не влияет и влиять не может.

Цитата YuS_2:
который перенаправлен в nul. »
А вот это не понял. Где там nul?!


Цитата TolikD:
Твой код тоже не работает. »
Работает.

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

Отправлено: 19:56, 23-08-2018 | #4


Новый участник


Сообщения: 44
Благодарности: 6

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
echo 123>test.txt
почему не затирается?

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

Отправлено: 20:12, 23-08-2018 | #5


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
А вот это не понял. Где там nul?! »
здесь:
Цитата TolikD:
C:\debug\cmdtest>pause 1>nul »
====================================================

Цитата TolikD:
решение проблемы?! »
Какой проблемы? Проблем никаких нет, я ведь Вам написал:
Цитата YuS_2:
при необходимости, файл с выходными данными переименовать »
в тот же test.txt с перезаписью...

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:15, 23-08-2018 | #6


Новый участник


Сообщения: 44
Благодарности: 6

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
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>

Отправлено: 20:18, 23-08-2018 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


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

Цитата TolikD:
Ну и переименуй »
от переименуя и слышу...
В смысле, тебе надо, ты и переименовывай... где тебя манерам учили?

-------
scio me nihil scire. Ѫ


Отправлено: 20:19, 23-08-2018 | #8


Новый участник


Сообщения: 44
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата:
В смысле, тебе надо, ты и переименовывай...
Еще раз: изначально переименовал.
При чем тут манеры? в итоге я прав

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

Отправлено: 20:23, 23-08-2018 | #9


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата TolikD:
Ну есть же решение, только без записи в левый файл. »
чем не устраивает решение:
Код: Выделить весь код
<test.txt>+ findstr /ivc:"192.168.1.101"&move+ test.txt
?
Религиозные принципы мешают?

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:34, 23-08-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - findstr при записи в тот же файл

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Выключается при выполнении memtest Neschur Непонятные проблемы с Железом 2 16-09-2015 00:02
Медиа - Ошибка при выполнении приложения-сервера при открытии мультимедийных файлов Никон_Стадник@vk Microsoft Windows 7 2 01-02-2013 11:22
Лишний сайт при открытии браузер korobka_dv Лечение систем от вредоносных программ 1 06-12-2012 00:45
Ошибка - Ошибка при выполнении cmd KvoD Microsoft Windows 2000/XP 6 26-12-2010 21:55
[решено] Лишний диалог при установке Win2003 S32 Автоматическая установка Windows 2000/XP/2003 3 29-03-2007 13:28




 
Переход