2012-07-12 367 views
1

我有包含以下數字批處理文件來比較文本文件的內容

File1 
00000 
11111 

File2 
00000 
11111 
22222 

我需要哪些文件2的內容進行比較,以該文件1的代碼兩個文本文件和不匹配的數字,在這種情況下,'22222'是file2中唯一的內容。

總之我想擦除file2的內容並將不匹配的內容放在file2中。下面是我試過的代碼,但它只是擦除file2中的所有內容。

setlocal enabledelayedexpansion 

for /f "tokens=1" %%a in (file1) do (type file2 | findstr /v %%a > file2) 

pause 

底線我需要實現以下結果

File1 
00000 
11111 

File2 
22222 

請幫助!

回答

3

這樣做的工作。它取決於使用findstr /m選項和錯誤級別。

它也在處理(並清除它)期間寫入臨時文件。


@echo off 
setlocal enabledelayedexpansion 
echo Stripping duplicates in file2 (%2) compared to lines in file1 (%1) 

if not exist "%1" (
    echo That first file doesn't exist. 
    exit /b 1 
) 

if not exist "%2" (
    echo That second file doesn't exist. 
    exit /b 2 
) 

REM Create empty temporary file 
echo. 2> %2.tmp 

for /f "tokens=1" %%a in (%2) do (
    echo Processing %%a 
    >nul call findstr /m "%%a" %1 
    if errorlevel 1 (
    echo OK 
    >> %2.tmp echo %%a 
) else (
    echo Duplicate! 
) 
) 


echo Writing results to %2 
xcopy /y /q %2.tmp %2 
del /q %2.tmp 
+0

Azhrei的腳本的作品完美... Thnks! – 2012-07-13 18:06:56

2

不同的方法:

@echo off 
setlocal 
for /f %%i in (file1) do set %%i=%%i 
for /f %%j in (file2) do if not defined %%j echo %%j 

它具有以下特點:
- 掃描每個文件的唯一一次
- 在文件1副本將被有效地忽略
- 你可以加載file1到內存中,然後運行幾個file_x對其進行測試。

注:
我只是附和獨特NUMS安慰,你需要更改寫入文件
假設你比較並有每行一個字
它是由限制可以定義的最大變量數量。我不知道那是什麼號碼是我在文件1 20條000線(所以20個000瓦爾定義)

6

嘗試它,我覺得這是最簡單和最快的原生批量解決方案

findstr /vixg:"File1" "File2" >"File2.new" 
move /y "File2.new" "File2" 

注我使用了findstr /i不區分大小寫的選項。這很重要,因爲findstr bug在搜索多個文字字符串時會導致錯過匹配,除非使用/i/r選項。由於您正在處理數字,因此不區分大小寫的解決方法不應影響您。

+0

+1用於包含有關錯誤的註釋。 – wmz 2012-07-14 09:13:31

+0

Awsome !!謝謝dbenham ... – 2012-07-16 14:55:43

0

這可以成爲解決方案之一:

findstr /V /G:file1.txt file2.txt