2013-08-24 4 views
0

Я узнал, что мой пакетный скрипт работает неправильно. Я хотел бы написать функцию, которая удаляет конкретную строку в файл, это мой код:Удаление определенной строки в файле с помощью пакетного скрипта

:unmark 
    type %MARKPATH% | findstr /B /V %1 > %MARKPATH_COPY% 
GOTO:EOF 

Да, это работает, но он пишет новое содержание (без конкретных линий) в новом файле. Но вместо этого я хочу перезаписать существующий файл. Например:

:unmark 
    type %MARKPATH% | findstr /B /V %1 > %MARKPATH% 
GOTO:EOF 

Но он не работает, файл пуст после выполнения кода. Можете ли вы помочь мне выяснить, что является проблемой и как ее решить?

ответ

0

Я думаю, я нашел решение моей проблемы (возможно, не практично, но он работал)

:unmark 
    set LASTPATH=%CD% 
    cd %MARKPATH% 
    type %MARKFILE% | findstr /B /V %1 > %MARKFILECOPY% 
    del %MARKFILE% 
    ren %MARKFILECOPY% %MARKFILE% 
    cd %LASTPATH% 
GOTO:EOF 
1

Этот стиль должен работать:

@echo off 
set "MARKPATH=%userprofile%\desktop\input.txt" 
set "MARKPATH_COPY=%userprofile%\desktop\searchfile.txt" 

findstr /B /V "%~1" <"%markpath%" > "%MARKPATH_COPY%" 
move /y "%MARKPATH_COPY%" "%markpath%" >nul 
+0

отличное решение, но что> NUL делать? EDIT: Я просто проверю это, и он работает неправильно. Он записывает строки, если содержит строку, указанную в findstr. Не удалять его. – Andrius

+0

> nul скрывает сообщение, которое печатает 'MOVE', чтобы экран был чистым. Команда findstr использует те же самые ключи, что и ваш пример. Тогда вы тоже должны ошибаться. : D – foxidrive

Смежные вопросы