![移动文件而不发生冲突](https://linux22.com/image/1504601/%E7%A7%BB%E5%8A%A8%E6%96%87%E4%BB%B6%E8%80%8C%E4%B8%8D%E5%8F%91%E7%94%9F%E5%86%B2%E7%AA%81.png)
我有许多文件folder1
,我想将它们移动到folder2
。 中已有少量文件folder2
(一百个,而 中有几千个folder1
),我想将所有文件从 移动folder1
到 ,folder2
除非存在文件名冲突。(此时,我将逐个检查剩余文件,并根据需要跳过/修改/替换。)
有什么好办法吗?我使用的是 Windows 10,但如果更方便的话,我可以通过 MinGW 使用 bash。
这就像批量复制和移动文件而不覆盖只不过它涉及数千个文件而不是单个文件。
答案1
我想将所有文件从文件夹 1 移动到文件夹 2,除非存在文件名冲突。
folder1
使用以下批处理文件(位于和的父目录中)folder2
。
移动文件.cmd:
@echo off
setlocal enabledelayedexpansion
for /f %%f in ('dir /b folder1') do (
if not exist folder2\%%~nxf move folder1\%%~nxf folder2
)
endlocal
笔记:
- 任何存在名称冲突(即已存在于
folder2
)的文件将保留在中folder1
。 - 所有其他文件均已移动。
使用示例:
F:\test>dir /b folder1
1.txt
2.txt
3.txt
4.txt
5.txt
F:\test>dir /b folder2
2.txt
4.txt
F:\test>MoveFiles.cmd
1 file(s) moved.
1 file(s) moved.
1 file(s) moved.
F:\test>dir /b folder1
2.txt
4.txt
F:\test>dir /b folder2
1.txt
2.txt
3.txt
4.txt
5.txt
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 对于/f- 循环命令以执行另一个命令的结果。
- 目录- 显示文件和子文件夹的列表。
- 参数- 命令行参数(或参数)是传递到批处理脚本的任何值。