如何比较两个文件夹的文件名并将不匹配的文件复制到新文件夹中?

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

我有两个文件夹,两个文件夹中都有文件。我想比较两个文件夹的文件名,并希望将不匹配的文件移动/复制到第三个文件夹。

如何在没有任何工具的情况下做到这一点?

我想用

cmd
来执行此操作。

示例:

文件夹1:

Filename1.pdf
Filename2.pdf
Filename3.tiff
Filename4.jpg

文件夹2:

Filename1.pdf
Filename2.pdf
Filename3.tiff
Filename4.jpg
Filename5.pdf
Filename6.jpg

结果:

文件夹3:

Filename5.pdf
Filename6.jpg
cmd compare difference file-copying
2个回答
1
投票

正如Stephan指出的,这段代码是针对linux命令行的,而不是针对windows cmd的。所以它需要 git bash 终端或 wsl 才能运行。

问题是关于cmd(Windows命令行)的。跑步 Unix/Linux 代码需要安装额外的工具,这 提问者明确不想要。

此代码会将文件夹 1 和文件夹 2 中所有不匹配的文件复制到文件夹 3 中。

第一行获取folder1 & 的所有目录和文件 folder2 并将它们列在文件中。

(ls -d folder1/* && ls -d folder2/*) > dir.txt

此行获取两个目录中都不存在的不匹配文件,并将它们列在一个文件中。

diff -r <(ls folder1) <(ls folder2) | sed 's/^< //' | sed 's/^> //' > unique.txt

此行从不匹配的文件中存在的目录文件中greps完整的文件路径并列出它们。

grep -wFf unique.txt dir.txt | sed 's/^< //' | sed 's/^> //' > tocopy.txt

现在我们有了所有文件路径的列表,我们可以将它们复制到folder3。

cp -r $(cat tocopy.txt) folder3

0
投票

对于没有设置隐藏属性的文件,可以使用带有以下代码的批处理文件来完成该任务:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SourceFolder1=C:\Full Path\Folder 1"
set "SourceFolder2=C:\Full Path\Folder 2"
set "TargetFolder=C:\Full Path\Folder 3"

if not exist "%SourceFolder1%\" echo ERROR: Missing source folder 1: "%SourceFolder1%"& goto ErrorExit
if not exist "%SourceFolder2%\" echo ERROR: Missing source folder 2: "%SourceFolder2%"& goto ErrorExit

md "%TargetFolder%" 2>nul
if exist "%TargetFolder%\" goto CopyFiles
echo ERROR: Failed to create target folder: "%TargetFolder%"

:ErrorExit
echo/
pause
exit /B 1

:CopyFiles
rem Copy all files being unique in source folder 1 to target folder.
for %%I in ("%SourceFolder1%\*") do if not exist "%SourceFolder2%\%%~nxI" copy "%%I" "%TargetFolder%\"

rem Copy all files being unique in source folder 2 to target folder.
for %%I in ("%SourceFolder2%\*") do if not exist "%SourceFolder1%\%%~nxI" copy "%%I" "%TargetFolder%\"

rem Remove the target folder on being still empty and restore previous environment.
rd "%TargetFolder%" 2>nul
endlocal

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • copy /?
  • echo /?
  • endlocal /?
  • exit /?
  • for /?
  • goto /?
  • if /?
  • md /?
  • pause /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?

另请参阅 使用 Windows 批处理文件的单行多个命令,了解无条件命令运算符

&
的说明。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.