使用批处理从文件中删除某些行
Deleting certain lines from a file using batch
所以我需要能够根据该行的第一个单词从文本文件中删除某些行。
我试过type file.txt | findstr /v %VAR% file.txt>file.txt
,但那样只会清除整个文件。
我也试过了
set /p VAR=word:
type file.txt | findstr /v %VAR% file.txt>new_file.txt
del /q file.txt
ren new_file.txt file.txt
但我仍然遇到同样的问题。
无论如何我可以做到这一点吗?
为什么要使用 type
和管道 |
,即使 findstr
可以自己读取文本文件?只需使用:
findstr /V /I "^%VAR%\>" "file.txt" > "new_file.txt"
^
将字符串锚定到行首,\>
构成一个单词边界,因为你想匹配第一个单词。
如果 %VAR%
可能还包含 SPACEs,它分隔多个搜索字符串,使用它来将整个字符串保留为一个搜索字符串:
findstr /V /I /R /C:"^%VAR%\>" "file.txt" > "new_file.txt"
如果要进行区分大小写的搜索,请删除 /I
选项。
要用新文件覆盖原始文件,只需使用:
move /Y "new_file.txt" "file.txt" > nul
所以我需要能够根据该行的第一个单词从文本文件中删除某些行。
我试过type file.txt | findstr /v %VAR% file.txt>file.txt
,但那样只会清除整个文件。
我也试过了
set /p VAR=word:
type file.txt | findstr /v %VAR% file.txt>new_file.txt
del /q file.txt
ren new_file.txt file.txt
但我仍然遇到同样的问题。 无论如何我可以做到这一点吗?
为什么要使用 type
和管道 |
,即使 findstr
可以自己读取文本文件?只需使用:
findstr /V /I "^%VAR%\>" "file.txt" > "new_file.txt"
^
将字符串锚定到行首,\>
构成一个单词边界,因为你想匹配第一个单词。
如果 %VAR%
可能还包含 SPACEs,它分隔多个搜索字符串,使用它来将整个字符串保留为一个搜索字符串:
findstr /V /I /R /C:"^%VAR%\>" "file.txt" > "new_file.txt"
如果要进行区分大小写的搜索,请删除 /I
选项。
要用新文件覆盖原始文件,只需使用:
move /Y "new_file.txt" "file.txt" > nul