用于根据名称复制文件的批处理脚本

Batch script for copying files based on name

基本上我想写一个小批处理脚本来执行以下操作 - 我有两个文件夹,A 和 B...A 有 10 个文件,B 有 100 个。我想比较每个文件夹中的文件名文件夹,如果B中有与A中重名的,则将它们复制到文件夹A中并覆盖原始文件。

我试图通过在文件夹 A 上执行 "for" 命令开始,但随后我将不得不使用 IF 来比较我不知道如何正确表达的文件名

    for /r "C:\folderA" %%a in (*.filetype) do (...)

抱歉,我对批处理脚本毫无用处。我找到了几个讨论类似问题的主题,但 rly 没有按照足够的答案来提供帮助。

这很难吗?比较两个文件名的其他线程看起来有点复杂。

感谢您的帮助:)

试试这个:

xcopy /s /u /y /i /r /c "C:\folderB\*.filetype" "C:\folderA"
  • /s 复制文件夹和子文件夹
  • /u 仅复制两个文件夹中预先存在的文件
  • /y 抑制覆盖文件的提示
  • /i 告诉 xcopy 目的地是一个文件夹
  • /r 忽略 READONLY 属性以防万一(这是可选的)
  • /c 即使发生错误也继续复制(这是可选的)

可以找到有关 xcopy 的更多信息 here(或 xcopy /?

如果这对您不起作用,那么应该这样做:

for /r "C:\folderA" %%a in (*.filetype) do if exist "C:\folderB\%%~nxa" copy /y "C:\folderB\%%~nxa" "C:\folderA\%%~nxa"

这是它的作用:

  • if exist 检查文件是否存在
    • 它检查的路径由 folderA 路径和在 folderB
    • 中找到的文件的名称和扩展名组成
  • copy /y 复制文件覆盖现有文件
    • 来自 folderB
    • 中找到的原始文件
    • folderA
    • 中找到的同名文件

%%~dpnxa 语法如下:

  • %%SOMETHINGa 表示这是一个for循环变量
  • ~ 抑制文件名周围的双引号(我们将提供自己的双引号)
  • d 用于磁盘 (c:)
  • p 是包含文件夹的路径 (\folderA\)
  • n 是文件名(即 readme
  • x 用于扩展(即 .txt

您可以随意混合搭配。更多信息是 here 或尝试 for /?

如果逻辑需要更复杂,我建议使用 ( ) 括号 + delayed expansion or call :label (call /?)

更新:更正了 FolderAFolderB

的混淆