SETLOCAL
rem The following settings for the directories and filenames are names
rem The following setting for the directory is a name
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:\your files"
SET "destdir=u:\your results"
SET "filename1=%sourcedir%\q76356312.txt"
SET "filename2=%sourcedir%\q76356312_2.txt"
SET "outfile=%destdir%\outfile.txt"
(
TYPE "%filename1%"
FINDSTR /x /v /g:"%filename1%" <"%filename2%"
)>"%outfile%"
GOTO :EOF
FINDSTR用于区分大小写并在行尾搜索分配给循环变量J的字符串,该字符串不应是之前通过简单字符串比较验证的空字符串。 **注意:**如果文件1.txt包含类似28 purple的行,文件2.txt包含类似20 brown and purple的行,则可能出现误报。从1.txt开始的线28 purple在这种情况下不在Result.txt中,因为在2.txt中有一条线也以空格和purple结束。如果不知道从文件1.txt读取的一行中,行首的数字后面可能有哪些字符,那么正则表达式的使用就很重要。
2条答案
按热度按时间rxztt3cl1#
应该按照您的要求,提供您提供的数据,但不是按照您提供的顺序。
请注意,第一个文件显示“12red”,但第二个文件显示“17red”
rmbxnbpk2#
可以使用以下批次代码:
主
for /F
循环将文件1.txt
中不以分号开头的每个非空行拆分为两个子字符串,使用普通空格和水平制表符作为分隔符。根据ASCII表,第一个子字符串是数字,被分配给指定的循环变量I
,数字后面的空格/制表符后面的其余行被分配给下一个循环变量J
。FINDSTR用于区分大小写并在行尾搜索分配给循环变量
J
的字符串,该字符串不应是之前通过简单字符串比较验证的空字符串。**注意:**如果文件
1.txt
包含类似28 purple
的行,文件2.txt
包含类似20 brown and purple
的行,则可能出现误报。从1.txt
开始的线28 purple
在这种情况下不在Result.txt
中,因为在2.txt
中有一条线也以空格和purple
结束。如果不知道从文件1.txt
读取的一行中,行首的数字后面可能有哪些字符,那么正则表达式的使用就很重要。如果在
2.txt
文件中的一行末尾找不到指定给循环变量J
的字符串,则从1.txt
文件中读取的行将带有一个普通空格。文件
1.txt
的所有输出行首先写入Result.txt
,最后将文件2.txt
中的所有行附加到Result.txt
上。要了解所使用的命令及其工作方式,请打开command prompt窗口,在其中执行以下命令,并完整仔细地阅读每个命令的帮助页面。
echo /?
endlocal /?
exit /?
findstr /?
for /?
goto /?
if /?
pause /?
setlocal /?
type /?
另请参阅single line with multiple commands using Windows batch file以了解无条件命令运算符
&
和条件命令运算符||
的解释。阅读有关Using command redirection operators的Microsoft文档,了解
>nul
的说明。