如何删除批处理文件中的用户定义行

时间:2014-10-07 07:08:29

标签: windows batch-file cmd

我想删除用户在一个文件中输入的特定行,然后将此文件另存为文件名。

例如我有这段代码

for /f "tokens=2,3" %%a in ('type c:\files.txt') do 
(
    Set /p line= ENTER THE LINE YOU WANT TO DISREGARD:
    findstr /v /r /c:"^[!line!]*$" "c:\file1\%%a" > "c:\file2\%%a"      ----> For Column2 (Name1)
    findstr /v /r /c:"^[!line!]*$" "c:\file1\%%a" > "c:\file2\%%a"      ----> For Column3 (Name2) 
)

Files.txt包含其他文件的文件名。然后在我的 for 语句中,它打开Files.txt(Column2和Column3)中指示的所有文件

files.txt示例内容:

Name    Name1.txt   Name2.txt
Age     Age1.txt    Age2.txt
Add     Add1.txt    Add2.txt

运行批处理文件后,为什么会自动删除文件中的所有文本?另外,如何删除一个提示中定义的多个用户?我可以用逗号分隔吗?

2 个答案:

答案 0 :(得分:0)

我认为您可能错过了enabledelayedexpansion关键字,结合正则表达式语法,您可能已经擦除了所有内容。实质上,您正在搜索^ [字符集] * $ - 例如大多数,如果不是所有行。

您实际上不需要使用正在尝试的正则表达式。

您可以使用多个/ v语句排除多个字符串。

试试这个:

@echo off
setlocal ENABLEDELAYEDEXPANSION

rem They can enter a comma separated list of strings to replace
for /f "tokens=1,2,3" %%a in (c:\files.txt) do (
    set /p line=ENTER THE LINE YOU WANT TO DISREGARD for %%a:
    set line=!line:,=" /c:"!
    findstr /v /i /c:"!line!" "c:\%%b" > "c:\file1\%%b"
    findstr /v /i /c:"!line!" "c:\%%c" > "c:\file2\%%c"
)

答案 1 :(得分:0)

我已经解决了问题

    Set /p line= enter line to remove :
for /f "tokens=2,3" %%a in ('type c:\file\files.txt') do (

Type c:\file\aaa\%%a  | findstr /I /V /C:"!line!" > c:\file\aaa\OUTPUT\%%a 
Type c:\file\bbb\%%b  | findstr /I /V /C:"!line!" > c:\file\bbb\OUTPUT\%%b