使用Batch脚本比较两个文件夹,然后根据结果运行一些批处理命令

时间:2016-12-20 13:17:25

标签: batch-file cmd

我需要使用Batch命令比较两个文件夹。这两个文件夹都包含子目录和文件。比较必须检查每个文件。如果存在任何差异,例如,如果我们要比较folder1folder2file1中存在folder1,但folder2中不存在true,然后它必须返回false(这样我才能做其他操作),否则passport.authenticate('bearer', {session: false})

我实际上正在从一个文件夹到另一个文件夹进行复制。一旦完成,我需要验证是否所有文件都被复制了。

注意:我不能使用任何第三方工具。

1 个答案:

答案 0 :(得分:2)

@echo off
REM Writing the folder tree to a file for each path
pushd "Folder 1"
for /f "delims=" %%c in ('tree /f') do >>"%~dp0folder1.txt" echo "%%c"
popd
pushd "Folder 2"
for /f "delims=" %%d in ('tree /f') do >>"%~dp0folder2.txt" echo "%%d"
popd

REM removing the first three lines from each of the two files
more +3 "folder1.txt" >"folder1.txt.new"
move /y "folder1.txt.new" "folder1.txt" >nul

more +3 "folder2.txt" >"folder2.txt.new"
move /y "folder2.txt.new" "folder2.txt" >nul

REM comparing files
fc /b folder1.txt folder2.txt>nul && echo same || echo different

REM cleaning up
del folder1.txt
del folder2.txt

只要文件夹位于同一驱动器上,就应该可以正常工作。将目录更改为第一个文件夹,并将命令树的输出打印到一个文件,并将其输出到另一个文件夹 然后比较/b inary f ile c omparison并输出same如果命令的输出和文件夹相同。如果不是,则输出different 删除后的两个帮助文件。

注意:如果您已有包含该名称的文件,请进行更改!

随意询问是否有不明确的事情:)

编辑:删除前3行以防止基于Volume-Number / Drive-Letter的比较效果。对于删除方式的信用转到dbenhams answer另一个问题。