使用批处理比较两个文件夹中的文件

问题描述 投票:0回答:1

我有两个带有子文件夹的文件夹。我需要一个脚本来遍历每个文件夹并检查文件夹 A 中的文件是否也在文件夹 B 中。如果不是,控制台应该回显文件名。

我的代码如下:

@echo off
set HMI_Kunde=C:\Test_HMI_2
set HMI_Update=C:\Test_HMI_1

for /R "%HMI_Kunde%" %%F in (*) do if not exist "%HMI_Update%\%%~nxF" echo %%~nxF

pause

它确实显示了仅位于文件夹 A 中的所有文件,问题是它还显示了子文件夹中的所有文件。子文件夹与文件具有相同的名称,因此它们不应该显示。

batch-file
1个回答
0
投票

如果您想忽略子文件夹,请删除

/R
之后的
FOR
开关。在您的情况下,它正在从
HMI_Kunde
根目录下的
HMI_Update
的子文件夹中查找文件,因为
%%~nxF
仅包含文件名而不包含其路径。

如果您需要检查子文件夹,事情会变得有点复杂,因为这两个文件夹是分开的,简单地使用

%%~pnxF
是不行的。如果您有不同的文件夹布局,那就更容易了:

  • HMI_Kunde=C:\Test_HMI_2
  • HMI_Update=C:\Test_HMI_1\Test_HMI_2

这样,您就可以在代码中使用

if not exist %HMI_Update%%%~pnxF ...

请注意,它将仅列出带有

(*)
的文件和带有
(.)
的文件夹。尝试运行以下命令并比较输出文件:

for /r %f in (*) do echo %~pnxF >> files.txt
for /r %f in (.) do echo %~pnxF >> folders.txt
for /d %f in (*) do echo %~pnxF >> subfolder.txt
© www.soinside.com 2019 - 2024. All rights reserved.