2014-10-07 56 views
0

我想刪除用戶在一個文件中輸入的特定行,然後將該文件保存爲與文件名相同。如何在批處理文件中刪除用戶定義的行

例如,我有這樣的代碼

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包含的其他文件的文件名。然後在我的聲明,它打開Files.txt(列2和欄3)所示的所有文件

files.txt樣本內容:

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

當我運行該批處理文件,爲什麼它會自動刪除文件中的所有文本?另外,如何刪除在一個提示中定義的多個用戶?我可以用逗號分隔嗎?

回答

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" 
) 
+0

我試圖用你的建議,但沒有運氣。這些文件的內容也被刪除 – PeterS 2014-10-07 10:33:05

+0

您是否將內容放入bat文件並運行該文件?例如doReplace.bat – 2014-10-07 12:19:32

+0

以下是關於我的代碼的步驟 1st - files.txt包含可在files.txt所在的同一目錄中找到的文件的文件名。然後,我想刪除files.txt第2和第3列中的文件的特定行(與上面的示例相同),然後保存它。我試過你建議的代碼仍然刪除列2和列3的文件的內容 – PeterS 2014-10-07 13:39:24

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