1

次のように2つの.propertiesファイルがあります

first.properties                    second.properties
-----------------                   ---------------------
firstname=firstvalue                fourthname=100100
secondname=secondvalue              sixthname=200200
thirdname=thirdvalue                nineththname=ninethvalue
fourthname=fourthvalue              tenthname=tenthvalue
fifthname=fifthvalue
sixthname=sixthvalue
seventhname=seventhvalue

2 つのファイルを名前で比較したいので、共通名と対応する値を first.properties から削除する必要があります。出力ファイルは次のようになります

third.properties.
------------------ 
firstname=firstvalue                
secondname=secondvalue              
thirdname=thirdvalue            
fifthname=fifthvalue
seventhname=seventhvalue

私は次のコードを使用しましたが、デカルト積のシナリオを与えています.上記を達成するために私を助けてください.

for /F "tokens=1,2 delims==" %%E in (first.properties) do (
    for /F "tokens=1,2 delims==" %%G in (second.properties) do (
    if "%%E" NEQ "%%G" echo %%E=%%F>>!HOME!\Properties\third.properties
    )
    )
4

2 に答える 2

0

以下のバッチ ファイルは、一時ファイルを作成せず、外部コマンド (findstr.exe など) も使用しないため、より高速に実行されます。

@echo off
setlocal EnableDelayedExpansion

rem Create list of names in second file
set "secondNames=/"
for /F "delims==" %%a in (second.properties) do set "secondNames=!secondNames!%%a/"

rem Copy properties of first file that does not appear in second one
(for /F "tokens=1* delims==" %%a in (first.properties) do (
   if "!secondNames:/%%a/=!" equ "%secondNames%" (
      echo %%a=%%b
   )
)) > third.properties

プロパティ名を区切るためにスラッシュを使用しました。この文字が名前に表示される場合は、プログラムで別の文字を選択してください。

以前のソリューションでは、ファイルから感嘆符を削除しました。この詳細は、必要に応じて修正できます。

于 2013-05-29T12:55:47.857 に答える