我有两组文件夹,它们是相同数据的两个版本,具有相同的子文件夹(200 多个)。我需要使用批处理将这些集合组合成一个略微新的结构。例如:
设置A\folder1\A_files \文件夹2\A_文件 \folder3\A_文件
设置B\folder1\B_files \文件夹2\B_文件 \文件夹3\B_文件
我需要像这样设置 setA:
设置A\文件夹1\A_files_文件夹\A_files \B_files_文件夹\B_files \A_文件 \文件夹2\A_files_文件夹\A_files \B_files_文件夹\B_files \A_文件 \文件夹3\A_files_文件夹\A_files \B_files_文件夹\B_files \A_文件
基本上,集合A获取两个新文件夹,一个用于复制A_文件一个要移动 B_文件变成。最后,什么都没有被移除集合A和集合B文件夹将被删除。
很简单,但很难解释。
感谢您的帮助!
答案1
您可以在 SuperUser 上找到很多类似的问题和适当的答案,以便自己了解如何开始为此编写脚本。由于您没有提到您使用的操作系统,我将提供适用于 Windows 的 Powershell 解决方案。
在 setA 中的每个文件夹中创建新的子文件夹,然后循环遍历 setA 的文件并将其复制到适当的A_files_folder
.
Foreach ($dir in Get-ChildItem -Directory -Recurse .\setA) { New-Item -Path $dir.FullName -Name "A_files_folder" -ItemType "Directory"; New-Item -Path $dir.FullName -Name "B_files_folder" -ItemType "Directory"; }
Foreach ($file in Get-ChildItem -File -Recurse .\setA) { Copy-Item -Path $file.FullName -Destination $($file.DirectoryName + "\A_files_folder\") }
处理作业的第二部分,我们需要使用原始文件路径的部分来创建目标路径,但它几乎与上一个Copy-Item
命令相同。我会用这个:
Foreach ($file in Get-ChildItem -File -Recurse .\setB) { Move-Item -Path $file.FullName -Destination $(".\setA\" + $($file.DirectoryName.Split("\")[-1]) + "\B_files_folder\") }