我想删除用户在一个文件中输入的特定行,然后将此文件另存为文件名。
例如我有这段代码
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
运行批处理文件后,为什么会自动删除文件中的所有文本?另外,如何删除一个提示中定义的多个用户?我可以用逗号分隔吗?
答案 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