![]() |
удаление строки из файла
Добрый день!
Помогите, пж-ста, добавить в скрипт код удаление строки из файла. Есть файл с именами компьютеров. Нужно, чтобы скрипт работал до тех пор, пока все хосты не будут обработаны. Вот код: Код:
@echo off |
Цитата:
Цитата:
Код:
for /F "usebackq tokens=*" %%f in (%~dp0hostnames.txt) do CALL :FUNC %%~f |
Предположим в файле 3000 хостов, нужен файл, где все "ОК" и файл, со списком оставшихся "проблемных" хостов.
Вызывается функция :FUNC, отрабатывается весь список, записывает в лог обработанные хосты, затем идет возврат к :Start и по новой, но зачем проходить весь список? Нужно только оставшуюся часть. И удобно смотреть сколько осталось обработать. |
HFShak, начнём с того. что в командном языке пакетных файлов отсутствует такая функция, как «удаление строки» (edlin в расчёт не берём). Удаление строк из файла, участвующего в разборе (без его предварительного чтения целиком и передачи по конвейеру) — это вообще интересная штука с не всегда предсказуемым поведением.
Хотите список «проблемных» — делайте их вывод в другой файл, наподобие: Хотите «смотреть сколько осталось» — делайте изначально подсчёт строк в файле, расчёты по мере обработки, включайте результаты подсчётов в вывод на консоль. И только-то. |
Поправляюсь. Конечно не:
Код:
>"%~dp0ErrHosts.txt" echo %%~i Код:
>>"%~dp0ErrHosts.txt" echo %%~i |
Я бы сделал так:
copy nul "%temp%\hostnames.tmp" for /F "usebackq delims=" %%s in ("%~dp0hostnames.txt") do ( if not %1==%%s echo %%s>>"%temp%\hostnames.tmp" ) move "%temp%\hostnames.tmp" "%~dp0hostnames.txt" Сейчас перечитал предыдущие посты и понял, что неверно сформулировано задание: "...тут нужно добавить код удаления хоста %1 из файла hostnames.txt..." Я и добавил. А надо было здесь сделать только формирование нового файла, с тем, чтобы после цикла им заменить старый: @echo off :Start copy nul "%temp%\hostnames.tmp" for /F "usebackq tokens=*" %%f in (%~dp0hostnames.txt) do CALL :FUNC %%~f move "%temp%\hostnames.tmp" "%~dp0hostnames.txt" goto :Start :FUNC if exist \\%1\C$\Windows ( md \\%1\C$\TEMP echo %1 done >> %TEMP%\log.txt for /F "usebackq delims=" %%s in ("%~dp0hostnames.txt") do ( if not %1==%%s echo %%s>>"%temp%\hostnames.tmp" ) ) else ( goto :eof ) |
Время: 18:33. |
Время: 18:33.
© OSzone.net 2001-