Как удалить всю строку в командном файле и повторно перевести в выходной файл? - PullRequest
0 голосов
/ 05 мая 2020

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

У меня есть файл ввода-вывода file.txt с некоторыми данными (Имя Фамилия Пол Возраст), а также некоторые функции это должно быть сделано с этим файлом, например:

  • добавить человека,
  • удалить человека,
  • отсортировать людей,
  • выйти,
  • показать список

Основная проблема возникает, когда я выбираю функцию для удаления человека. Я пытался перезаписать файл с помощью type %~f1 | findstr /v %name% > %~f1, но он удаляет все из файла ввода-вывода. Я также пробовал type %~f1 | findstr /v %name% >> %~f1, но он добавляет несколько строк, которые мне не нужны ...

Мне нужна функция, которая удаляла бы всю строку, содержащую введенное имя (или фамилию), и показывала бы мне выходной файл без этой строки.

@echo off

:PAT
cls
color 4f

echo.
if exist %~f1 (
    rem goto PRA
) else (
    echo ERROR
    goto END
)

:PRA
echo Menu:
echo 1) Add a person
echo 2) Delete a person
echo 3) Sort
echo 4) Exit
echo 5) Show the list

echo.
choice /c 12345 /m "Choice: "


if errorlevel 5 goto AAA
if errorlevel 4 goto END
if errorlevel 3 goto SOR
if errorlevel 2 goto DEL
if errorlevel 1 goto ADD

:EOF
pause

:END
choice /m "Continue?"
if errorlevel 2 goto NE
if errorlevel 1 goto TAI

:TAI
cls
goto PAT

:NE
Exit

:SOR

echo Which sort?
echo 1: A-Z
echo 2: Z-A

choice /c 12 /m "Choice: "

if errorlevel 2 goto ZTA
if errorlevel 1 goto ATZ

:ATZ
type %~f1 | sort /+1 /o %~f1
cls
goto PRA

:ZTA

type %~f1 | sort /+1 /r /o %~f1
cls
goto PRA

:DEL

echo Enter the name:
set /p name=
type %~f1 | findstr /v /i %name% > %~f1
goto PRA

:ADD

set /p name=Enter the name: 
set /p surname=Enter the surname:
set /p sex=Enter the sex:
set /p age=Enter the age:
echo %vardas% %surname% %sex% %age%>>%~f1
echo.
cls
goto PRA

:AAA
cls
echo _________________________
more %~f1
echo _________________________
goto PRA
...