如何在powershell中合并同名文件夹?

jk9hmnmh  于 2023-11-18  发布在  Shell
关注(0)|答案(1)|浏览(160)

我有一个维护不好的目录列表,这些目录应该有相同的子目录,但随着时间的推移,其中一些目录已经在错误的级别结束。
目录应该是结构化的:

Top Level
     WrapperFolder
         SubFolder1
             Files
         SubFolder2
             Files

字符串
但我有这样的目录:

Top Level
    SubFolder1
        Files
    WrapperFolder
        SubFolder1
            Files


我想从顶层移动SubFolder1,并将其与WrapperFolder中的SubFolder1合并
我试探着:

move-item -path "c:\TopLevel\SubFolder" -dest "C:\TopLevel\WrapperFolder\"


但是,当相同的目录名已经存在时,这会引发IOException。有没有一种方法可以合并这些目录,或者我需要递归地将文件移动到正确的文件夹并删除原始文件夹?

4urapxun

4urapxun1#

如果你想像文件浏览器那样合并文件夹,你需要使用windows shell com对象。这个解决方案here基本上就是你需要的,除了我们使用MoveHere来移动目录,而不是使用CopyHere函数。这个解决方案基于那个例子。

$sourcePath = "C:\Users\path\New folder\SubFolder1"
 $destinationPath = "C:\Users\path\New folder\WrapperFolder"
 $sourceFolder = (new-object -com shell.application).NameSpace($sourcePath)
 $destinationFolder = (new-object -com shell.application).NameSpace($destinationPath)

 $destinationFolder.MoveHere($sourceFolder,16)

字符串
我们传递$sourceFolder1616是对应于选项(reference)的标志值:
对于显示的任何对话框,请回答“Yes to All”。
使用该选项,文件夹将被合并,任何同名的文件将被覆盖。如果您不想覆盖文件,还有其他选项,例如“8”:
如果具有目标名称的文件已经存在,则在移动、复制或重命名操作中为正在操作的文件提供给予新名称。

相关问题