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
Windows 在命令行中从较大数据集中删除较小数据集的最简单方法_Windows_Batch File_Cmd - Fatal编程技术网

Windows 在命令行中从较大数据集中删除较小数据集的最简单方法

Windows 在命令行中从较大数据集中删除较小数据集的最简单方法,windows,batch-file,cmd,Windows,Batch File,Cmd,我正在寻找筛选两个文件的最简单方法。 输入:txt文件 文件1(较大的文件): 文件2(较小的文件): 输出: 在输出上,我希望有一个包含非重复(唯一)数据集的新文件。换句话说,输出文件中必须只有来自较大文件1且唯一且不出现在较小文件2中的条目。 顺便说一句: 如果文件名很长并且每次进入控制台时都很难输入,如何轻松地执行此操作?“非常痛苦” 虽然只有标准功能才能做到这一点,但我能想到的最好的方法仍然是非常痛苦的。所以,你想要的只是找到一个可以轻松完成这项任务的程序,这使得这个问题脱离主题。有没有

我正在寻找筛选两个文件的最简单方法。

输入:txt文件
文件1(较大的文件):

文件2(较小的文件):

输出: 在输出上,我希望有一个包含非重复(唯一)数据集的新文件。换句话说,输出文件中必须只有来自较大文件1且唯一且不出现在较小文件2中的条目。

顺便说一句:
如果文件名很长并且每次进入控制台时都很难输入,如何轻松地执行此操作?

“非常痛苦”


虽然只有标准功能才能做到这一点,但我能想到的最好的方法仍然是非常痛苦的。所以,你想要的只是找到一个可以轻松完成这项任务的程序,这使得这个问题脱离主题。有没有办法从弹出窗口中选择file1.txt和file2.txt?这将是“非常痛苦”的部分。但是您知道吗,您可以在命令提示下使用
选项卡
键来完成文件名?输入前两个或三个字符,然后按几次
TAB
,它将在所有匹配的文件名之间切换。您的基本逻辑是正确的,但这有错误,其中一个无法解决。“查找”是一个糟糕的选择,因为它将报告
234
匹配
1234
。FINDSTR更好,因为您可以指定
/X
选项来精确匹配整行。它还需要
/L
选项来防止正则表达式的解释。但是\\和\“搜索字符串中的文字要求将前导\转义为\\。更麻烦的是一个可怕的FINDSTR bug,它会导致使用多个不同长度字符串的搜索有时会错过匹配。看,好的。感谢您的帮助:)。@dbenham的最后一点可以通过另一个
来解决,以便检查一个又一个字符串。丑陋而缓慢,但可靠(?)。我没有得到“但是”“和\”“文字…”部分-可能有些字符没有按预期显示。(我阅读了链接,但部分内容(但)有点落后于我的视野。)我编辑了我的答案,以包括dbenhams评论的前几部分。
abc111
abc112
abc113
abc114
abc115
...
zbc999
abc111
abc112
abc113
@echo off
REM step 1: remove doublettes from file1
echo.>file1.tmp
for /f %%i in (file1.txt) do (
 findstr /x /L "%%i" file1.tmp>nul ||echo %%i>>file1.tmp
)

REM step 2: extract lines that doesn't exist in file2
findstr /v /x /L /g:file2.txt file1.tmp >output.txt

type output.txt