使用Windows上的批处理文件从另一个文档中存在的一个文档中删除行

时间:2014-06-09 21:49:57

标签: windows batch-file

我想删除另一个文档中已存在的一个文档中的行。

示例:

文件1

A
B
C
D

文件2

A
C

新文件

B
D

有没有办法在Windows上将其写为批处理文件?

之前已经在这里提出过这个问题,但是没有一个问题对我有帮助,因为它们都适用于Linux或其他不能在批处理文件中运行的东西。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

@echo off
setlocal

rem Define the lines in Document2
for /F "delims=" %%a in (Document2.txt) do set doc2["%%a"]=1

rem Show lines in Document1 that are not in Document2
for /F "delims=" %%a in (Document1.txt) do (
   if not defined doc2["%%a"] (
      set /P "=%%a" < NUL
      echo/
   )
)
如果文档包含引号,

以前的批处理文件可能会失败,尽管这取决于引号与空格的位置。 Document1是两个文件中最大的一个是方便的。

答案 1 :(得分:0)

Windows批处理文件没有可以处理此问题的文件读取功能。它没有替代grep或Linux的任何高级文本搜索功能,所以AFAIK,使用vanilla Windows批处理脚本无法完成。

我不会推荐任何自定义Windows批处理脚本编写器,因为它们都不同,如果你想走这条路,你可以通过找到合适的批处理脚本程序来安装Windows上的Linux答案。

如果您提供了为什么要这样做的完整上下文,除了使用Windows批处理脚本之外,还有更好的方法可以做到这一点吗?您可以使用更强大的脚本引擎(如AutoHotKey和其他类似程序)轻松制作自包含的可执行文件。