Windows命令|拆分文件以包含其他文件不包含的文件

时间:2019-09-14 19:47:06

标签: batch-file cmd compare findstr

我有2个文件:tempfile.txt和mainfile.txt。我想解析tempfile并检查其中的字符串是否存在于mainfile中。如果他们这样做,我想将字符串放入contain.txt。如果没有,则应将它们放在dcontain.txt

当我运行下面的脚本时,未创建dcontain.txt文件。相反,所有搜索字符串都以contain.txt结尾。

@echo off
for /f "tokens=1" %%a in (tempfile.txt) do (
findstr /m "%%a" mainfile.txt
if %errorlevel%==0 (
echo %%a>>contain.txt
)else (
echo %%a>>dcontain.txt
)
)

请在下面查看mainfile,tempfile的内容以及应该包含的内容。txt和dcontain.txt。最后一栏是我看到的。

mainfile  tempfile   contain   dcontain |O|contain.txt
11111     11111      11111     aaaaa    |U|11111 
22222     aaaaa      22222     bbbbb    |T|aaaaa       
33333     22222      33333              |O|22222   
44444     bbbbb                         |U|bbbbb      
55555     33333                         |T|33333                        

2 个答案:

答案 0 :(得分:1)

作为一种选择,并且仅基于您提供的内容,您应该可以在没有的情况下做到这一点:

FindStr /IG:"tempfile.txt" "mainfile.txt">"contain.txt"
FindStr /VIG:"mainfile.txt" "tempfile.txt">"dcontain.txt"

注意:
当您使用/G时,文件第一行的内容确定搜索是以文字字符串还是正则表达式进行。显然,在您提供内容时,我认为无需明确告诉使用哪个内容,因为您的内容不包含正则表达式字符。因此,也许您应该使用/L选项,只是为了确保也只使用/X选项来进行完全匹配。要找出可用的选项,请打开“命令提示符”窗口,然后输入findstr /?

FindStr /XLIG:"tempfile.txt" "mainfile.txt">"contain.txt"
FindStr /XVLIG:"mainfile.txt" "tempfile.txt">"dcontain.txt"

答案 1 :(得分:0)

批处理是一种挑剔的野兽,您执行此操作的方式存在一些细微的问题。 %ERRORLEVEL%扩展在DO块中的解析时发生,因此仅被评估一次,并且不会像预期的那样得到0和1。

设置enabledelayedexpansion可以帮助您。在检查是否相等时,EQUNEQ是“数字”运算符,而==将用于字符串比较。

如果您按以下方式进行更改,则可以使代码正常工作:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1" %%a in (tempfile.txt) do (
findstr /I "%%a" mainfile.txt >nul 2>&1

if ERRORLEVEL 1 (

    echo %%a>>dcontain.txt  

)else (

    echo %%a>>contain.txt   
)
)