用于根据名称复制文件的批处理脚本
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 /?
)
更新:更正了 FolderA
和 FolderB
的混淆
基本上我想写一个小批处理脚本来执行以下操作 - 我有两个文件夹,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 /?
)
更新:更正了 FolderA
和 FolderB