|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - findstr при записи в тот же файл |
|
CMD/BAT - findstr при записи в тот же файл
|
Новый участник Сообщения: 44 |
Профиль | Отправить PM | Цитировать
Мне нужно удалить заданную строку в текстовом файле. Конкретно нужно удалить ай пи и перезаписать файл без данной строки.
Судя по ману команды findstr делается это так: Результат будет вывод файла без искомой строки. Однако, при добавлении кода с записью в тот же самый файл, текст в файле затирается полностью. Батник: Результат: пустой файл test.txt. Что не так делаю? PS А при чем тут единичка? Старый текст темы
Как-то давным давно я уже сталкивался с этой проблемой на семёрке, убил в тот раз целый день и пришлось всё делать через зад. А щас то же самое на ДЕСЯТКЕ!!!
Кто-нибудь мне скажет что тут происходит??? С кодом всё понятно вроде. Здесь командой 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 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать |
Отправлено: 20:54, 23-08-2018 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата TolikD:
1. Добавь в свой файл несколько строк и увидишь, почему го%нокод (его можно исправить, кстати) 2. Добавь в свой файл тысяч сто строк и замеряй скорость обработки (даже в случае с исправленным вариантом) 3. Посыпать голову пеплом не требуется, но манеры свои, всё же, подправь... на будущее. |
|
------- Отправлено: 21:03, 23-08-2018 | #12 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата TolikD:
Цитата TolikD:
Цитата TolikD:
Решение же банально — разнести чтение из и вывод в один и тот же файл, не делать этого одновременно в пределах одной команды. Цитата TolikD:
Цитата TolikD:
Цитата TolikD:
Цитата TolikD:
Цитата YuS_2:
Цитата TolikD:
Цитата TolikD:
@echo off
setlocal enableextensions enabledelayedexpansion
echo --- До... --------------------------
type "test.txt"
echo ------------------------------------
rem Здесь начало Вашего кода
for /f "usebackq" %%a in (`findstr /V "192.168.1.101" test.txt`) do (set content=%%a)
echo %content%>test.txt
rem Здесь окончание Вашего кода
echo --- ...и после ---------------------
type "test.txt"
echo ------------------------------------
endlocal
exit /b 0
|
||||||||||
Последний раз редактировалось Iska, 23-08-2018 в 21:22. Отправлено: 21:08, 23-08-2018 | #13 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
тут главное непонятно: зачем именно такое действие, что за религия запрещает применение промежуточного файла? ... в любом случае, представленный выше вариант, это наиболее быстрый вариант. Можно, конечно, через цикл for такое осуществить (как попытался сделать ТС, пусть и коряво...), т.к. команды, результат которых разбирается в цикле, выполняются в новом процессе, но это очень медленно и неэффективно в итоге, плюс ещё со своими особенностями (такими как съедание пустых строк и т.п.) |
|
------- Отправлено: 21:23, 23-08-2018 | #14 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 21:29, 23-08-2018 | #15 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 21:36, 23-08-2018 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 21:56, 23-08-2018 | #17 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 22:05, 23-08-2018 | #18 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Всё! Товарищ один помог, все недостатки for исправляются параметрами, но всё равно корявенько получилось эт да! Батники в винде, когда дело касается обработки текста - это конечно же ещё та мозголомка башка кипит.
|
Отправлено: 23:56, 23-08-2018 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата TolikD:
Цитата TolikD:
@echo off
setlocal enableextensions enabledelayedexpansion
set NL=^
set content=
for /f "usebackq delims=: tokens=1* eol=" %%a in (`findstr /V /N "192.168.1.101" test.txt`) do set content=!content!%%b!NL!
>"Result.txt" echo !content!
endlocal
exit /b 0
— добро пожаловать в смешанный мир Windows+Unix! CrLf и Lf в одном флаконе! Как поведёт себя приложение, которое должно будет работать с получившимся кадавром — вопрос. |
||
Отправлено: 00:26, 24-08-2018 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Выключается при выполнении 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 |
|