基本上,我想编写一个执行以下操作的批处理脚本-我有两个文件夹,A和B ... A有10个文件,B有100个文件。我想比较每个文件夹中的文件名和如果B中的名称与A中的名称相同,则将其复制到文件夹A并覆盖原始文件。
我试图通过在文件夹A上执行“ for”命令来开始工作,但随后我必须在IF后面加上一个IF,以比较我不知道如何正确表达的文件名
for /r "C:\folderA" %%a in (*.filetype) do (...)
很抱歉,但是批处理脚本没用。我发现有两个主题涉及相似的问题,但是rly没有足够的答案来提供帮助。
这难吗?比较两个文件名的其他线程看起来有点复杂。
感谢您的帮助:)
答案 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 expansion或call :label
(call /?
)
更新:更正了FolderA
和FolderB
的混合情况