Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件,用于比较没有重复标题的文本文件_Batch File_Text_Header_Duplicates - Fatal编程技术网

Batch file 批处理文件,用于比较没有重复标题的文本文件

Batch file 批处理文件,用于比较没有重复标题的文本文件,batch-file,text,header,duplicates,Batch File,Text,Header,Duplicates,我需要创建一个批处理文件,该批处理文件将执行以下操作:我有两个没有标题的文本文件,需要在某一列中相互比较是否存在重复项 文件1看起来像: 34551897 455684 2170865488 34668571 455674 2165586244 34156474 456178 2156189465 34156184 428516 2153185687 3415

我需要创建一个批处理文件,该批处理文件将执行以下操作:我有两个没有标题的文本文件,需要在某一列中相互比较是否存在重复项

文件1看起来像:

34551897        455684           2170865488
34668571        455674           2165586244
34156474        456178           2156189465
34156184        428516           2153185687
3415647         458566           2183154897
3515647         168594           2156984161
3513157         412348           2156748416
3581354         154613           2156789131
文件2看起来像:

34551897        455684           2170865488
34668571        455674           2165586244
34156474        456178           2156189465
34156184        428516           2153185687
3415647         458566           2183154897
3515647         168594           2156984161
3513157         412348           2156748416
3581354         154613           2156789131
我需要比较文件1和文件2的第二列是否有重复项,如果有重复项,则返回零。否则,返回1

文本文件位于同一台计算机上,但文件夹不同


任何帮助都将不胜感激。提前谢谢

如果匹配字符串的位置不相关,这可能会有所帮助:

@echo off
setlocal enabledelayedexpansion
set count=0

for /f "usebackq tokens=2 delims=TAB " %%i in ("C:\TEST\test columns 1.txt") do (
echo %%i
)>>C:\TEST\temp.txt

for /f "usebackq tokens=2 delims=TAB " %%i in ("C:\TEST\test columns 2.txt") do (
findstr /c:"%%i" "C:\TEST\temp.txt"
if !errorlevel!==0 set /a count+=1
)
echo !count! match(es)
pause
del /q "C:\TEST\temp.txt"
您需要将路径替换为与您相关的路径。此外,通过嵌套以下条件,可以更有效地执行此操作:

@echo off
setlocal enabledelayedexpansion
set count=0

for /f "usebackq tokens=2 delims=TAB " %%i in ("C:\TEST\test columns 1.txt") do (
    for /f "usebackq tokens=2 delims=TAB " %%j in ("C:\TEST\test columns 2.txt") do (   
    if %%i==%%j set /a count+=1
    )
)
echo !count! match(es)
pause

只是几个问题来澄清一些事情我有点慢你看。。。两个文件的副本是否需要在第二列中完全相同的位置?当你说返回一个零。否则,返回1。您的意思是在命令提示窗口中输出1还是0?或者简单地确认是否存在重复的问题?:要求家庭作业帮助的问题必须包括到目前为止你为解决问题所做的工作的摘要,以及对你解决问题的困难的描述。提示:请注意中的ECHO、SET、FOR/F、IF和EXIT命令。回到这里,你的问题可能会遇到困难,请寻求更多的帮助。@JosefZ我注意到这个社区有很多寻求帮助的问题,询问者指定了需要什么,但没有证据表明他们试图这样做,甚至没有给出他们可能正在考虑的潜在路线。我只是假设提问者在问答案,这样他们就可以从中逆向学习。。。或者像有些人说的那样通过比较来学习。。。不管怎样,我从这些问题中受益,因为我喜欢挑战,喜欢找到解决方案,但这违背了真正的目的;询问者实际上也从我的努力中学到了东西,而不仅仅是方便地将其作为达到目的的手段。@chris谢谢你的帮助chris。你这批货做得很好。我不熟悉创建批处理文件,并且在使用findstr命令时遇到了一些问题。我能够使用您提供的内容,以及一些额外的脚本来完成我的工作。我从中学到了很多。再次感谢@布兰登。。。没问题,祝你一切顺利DIf如果我想在计数大于0时以0返回退出,或者如果计数等于0时以1退出,它看起来会是这样的:echo%count%>0 exit 0 echo%count%==0 exit 1在if语句中,批处理也使用errorlevels请参见,因此您需要使用/b。。。如果您想根据第一批的终止方式运行第二批,您可能需要一个命令。祝你好运