Batchscript 无法从文本文件中删除行
Batchscript can't remove line from text file
我一直在制作一个记录 phone 数字的小脚本,它工作正常,但我在使用删除功能时遇到问题,我收到错误:FINDSTR:无法打开 del 和 FINDSTR : 无法打开 /s。
@echo off
:menu
cls
echo ^<^<^<^<^< Test Nisse's phone records ^>^>^>^>^>
echo ^<1^>. Search for phone number
echo ^<2^>. Enter a new phone number
echo ^<3^>. Remove phone number
echo ^<4^>. Print all of the telephone record on the screen
echo ^<x^>. Exit
set /p val="Enter your selection <1-4, x>: "
if %val%== 1 goto one
if %val%== 2 goto two
if %val%== 3 goto three
if %val%== 4 goto four
if %val%== x goto x
:one
cls
set /p n1="Number: "
findstr /r /c:%n1% telephoneregister.txt
echo.
echo ====================
SET /p =ENTER to go back to menu.
goto menu
:two
cls
set /p p1="Number: "
echo %p1% >> telephoneregister.txt
echo.
echo ====================
set /p =ENTER to go back to menu.
goto menu
:three
cls
echo Which number would you like to delete?
set /p num="Telephoneregister: "
type telephoneregister.txt | findstr /v %num% > telephoneregister1.txt del /s telephoneregister.txt
type telephoneregister1.txt > tele.txt del /s tele1.txt
set /p =ENTER to go back to menu.
goto menu
:four
cls
type telephoneregister.txt
echo.
echo ====================
set /p =ENTER to go back to menu.
goto menu
:x
exit
在 :two 中,您要在每个 phone 数字后写一个 space:
echo %p1% >> telephoneregister.txt
将其更改为:
echo %p1%>> telephoneregister.txt
将 :three 更改为:
:three
cls
echo Which number would you like to delete?
set /p num="Telephoneregister: "
type telephoneregister1.txt | findstr /v %num% telephoneregister.txt > telephoneregister1.txt
copy /y telephoneregister1.txt telephoneregister.txt > nul
del telephoneregister1.txt
set /p =ENTER to go back to menu.
goto menu
"findstr /v" 部分会将所有与编号不匹配的行写入您的备份文件 (telephoneregister1.txt)。然后我们将该文件复制回 telephoneregister.txt(覆盖它)并删除备份文件。
您需要 &
在一行中的命令之间,否则 cmd
将假定第二个命令是第一个命令的额外参数。
type telephoneregister.txt | findstr /v %num% > telephoneregister1.txt del /s telephoneregister.txt
应该变成
type telephoneregister.txt | findstr /v %num% > telephoneregister1.txt&del /s telephoneregister.txt
甚至更简单
type telephoneregister.txt | findstr /v %num% > telephoneregister1.txt
del /s telephoneregister.txt
或者,更简单
type telephoneregister.txt | findstr /v %num% > telephoneregister1.txt
move /y telephoneregister1.txt telephoneregister.txt >nul
其中 move
命令将用源文件覆盖目标文件。 /y
表示 "don't prompt for authority to overrite" 并且 1 file(s) moved
消息被重定向到 nul
被抑制
我稍微修改了您的代码以解决几个小细节,或使其更简单。这是:
@echo off
:menu
cls
echo ^<^<^<^<^< Test Nisse's phone records ^>^>^>^>^>
echo ^<1^>. Search for phone number
echo ^<2^>. Enter a new phone number
echo ^<3^>. Remove phone number
echo ^<4^>. Print all of the telephone record on the screen
echo ^<x^>. Exit
choice /C 1234x /M "Enter your selection: "
if %errorlevel% equ 5 exit /B
cls
call :option-%errorlevel%
echo.
echo ====================
SET /p =ENTER to go back to menu.
goto menu
:option-1 Search
set /p n1="Number: "
findstr /i /r /c:%n1% telephoneregister.txt
exit /B
:option-2 Enter
set /p p1="Number: "
set /P "=%p1%" < NUL >> telephoneregister.txt
echo.>> telephoneregister.txt
exit /B
:option-3 Remove
echo Which number would you like to delete?
set /p num="Telephoneregister: "
findstr /v %num% telephoneregister.txt > telephoneregister1.txt
move /Y telephoneregister1.txt telephoneregister.txt
exit /B
:option-4 Print
more telephoneregister.txt
exit /B
顺便说一句,您也可以使用完全相同的代码管理电话号码后的姓名;只是 "Enter number followed by name" 和 "Enter number or name to search".
我一直在制作一个记录 phone 数字的小脚本,它工作正常,但我在使用删除功能时遇到问题,我收到错误:FINDSTR:无法打开 del 和 FINDSTR : 无法打开 /s。
@echo off
:menu
cls
echo ^<^<^<^<^< Test Nisse's phone records ^>^>^>^>^>
echo ^<1^>. Search for phone number
echo ^<2^>. Enter a new phone number
echo ^<3^>. Remove phone number
echo ^<4^>. Print all of the telephone record on the screen
echo ^<x^>. Exit
set /p val="Enter your selection <1-4, x>: "
if %val%== 1 goto one
if %val%== 2 goto two
if %val%== 3 goto three
if %val%== 4 goto four
if %val%== x goto x
:one
cls
set /p n1="Number: "
findstr /r /c:%n1% telephoneregister.txt
echo.
echo ====================
SET /p =ENTER to go back to menu.
goto menu
:two
cls
set /p p1="Number: "
echo %p1% >> telephoneregister.txt
echo.
echo ====================
set /p =ENTER to go back to menu.
goto menu
:three
cls
echo Which number would you like to delete?
set /p num="Telephoneregister: "
type telephoneregister.txt | findstr /v %num% > telephoneregister1.txt del /s telephoneregister.txt
type telephoneregister1.txt > tele.txt del /s tele1.txt
set /p =ENTER to go back to menu.
goto menu
:four
cls
type telephoneregister.txt
echo.
echo ====================
set /p =ENTER to go back to menu.
goto menu
:x
exit
在 :two 中,您要在每个 phone 数字后写一个 space:
echo %p1% >> telephoneregister.txt
将其更改为:
echo %p1%>> telephoneregister.txt
将 :three 更改为:
:three
cls
echo Which number would you like to delete?
set /p num="Telephoneregister: "
type telephoneregister1.txt | findstr /v %num% telephoneregister.txt > telephoneregister1.txt
copy /y telephoneregister1.txt telephoneregister.txt > nul
del telephoneregister1.txt
set /p =ENTER to go back to menu.
goto menu
"findstr /v" 部分会将所有与编号不匹配的行写入您的备份文件 (telephoneregister1.txt)。然后我们将该文件复制回 telephoneregister.txt(覆盖它)并删除备份文件。
您需要 &
在一行中的命令之间,否则 cmd
将假定第二个命令是第一个命令的额外参数。
type telephoneregister.txt | findstr /v %num% > telephoneregister1.txt del /s telephoneregister.txt
应该变成
type telephoneregister.txt | findstr /v %num% > telephoneregister1.txt&del /s telephoneregister.txt
甚至更简单
type telephoneregister.txt | findstr /v %num% > telephoneregister1.txt
del /s telephoneregister.txt
或者,更简单
type telephoneregister.txt | findstr /v %num% > telephoneregister1.txt
move /y telephoneregister1.txt telephoneregister.txt >nul
其中 move
命令将用源文件覆盖目标文件。 /y
表示 "don't prompt for authority to overrite" 并且 1 file(s) moved
消息被重定向到 nul
我稍微修改了您的代码以解决几个小细节,或使其更简单。这是:
@echo off
:menu
cls
echo ^<^<^<^<^< Test Nisse's phone records ^>^>^>^>^>
echo ^<1^>. Search for phone number
echo ^<2^>. Enter a new phone number
echo ^<3^>. Remove phone number
echo ^<4^>. Print all of the telephone record on the screen
echo ^<x^>. Exit
choice /C 1234x /M "Enter your selection: "
if %errorlevel% equ 5 exit /B
cls
call :option-%errorlevel%
echo.
echo ====================
SET /p =ENTER to go back to menu.
goto menu
:option-1 Search
set /p n1="Number: "
findstr /i /r /c:%n1% telephoneregister.txt
exit /B
:option-2 Enter
set /p p1="Number: "
set /P "=%p1%" < NUL >> telephoneregister.txt
echo.>> telephoneregister.txt
exit /B
:option-3 Remove
echo Which number would you like to delete?
set /p num="Telephoneregister: "
findstr /v %num% telephoneregister.txt > telephoneregister1.txt
move /Y telephoneregister1.txt telephoneregister.txt
exit /B
:option-4 Print
more telephoneregister.txt
exit /B
顺便说一句,您也可以使用完全相同的代码管理电话号码后的姓名;只是 "Enter number followed by name" 和 "Enter number or name to search".