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

时间:2018-11-17 10:06:56

标签: batch-file copy compare filenames

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

我试图通过在文件夹A上执行“ for”命令来开始工作,但随后我必须在IF后面加上一个IF,以比较我不知道如何正确表达的文件名

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

很抱歉,但是批处理脚本没用。我发现有两个主题涉及相似的问题,但是rly没有足够的答案来提供帮助。

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

感谢您的帮助:)

1 个答案:

答案 0 :(得分:3)

尝试一下:

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

可以在here(或xcopy /?)中找到有关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 expansioncall :labelcall /?

更新:更正了FolderAFolderB的混合情况