在PowerShell中,如何递归复制目录并同时更改其名称

时间:2017-01-04 12:04:00

标签: powershell recursion directory copy

我有以下目录结构:

Foo
+--Bar
   +--Baz
      +--Garply
         +--...

使用PowerShell,我想以递归的方式将Baz复制到Foo并将其名称更改为Qux,以获得以下结构:

Foo
+--Bar
|  +--Baz
|     +--Garply    
|        +--...    
+--Qux
   +--Garply
      +--...

如果我打电话

Copy-Item .\Foo\Bar\Baz .\Foo\Qux -Recurse

我明白了:

Foo
+--Bar
|  +--Baz
|     +--Garply    
|        +--...    
+--Qux
   +--Baz
      +--Garply
         +--...

这不是我所期望的。

我可以将目标定位到。\ Foo并稍后将文件夹Baz重命名为Qux,但这是一个额外的复杂功能,并且还存在名称冲突的额外风险。

有没有办法只用Copy-Item个调用来做到这一点?还有其他简单的选择吗?

1 个答案:

答案 0 :(得分:1)

如果目录Copy-Item .\Foo\Bar\Baz .\Foo\Qux -Recurse已经存在,

Baz只会将Qux置于Qux之下。

尝试这样的事情:

$src = '.\Foo\Bar\Baz'
$dst = '.\Foo\Qux'

if (Test-Path -LiteralPath $dst -Type Container) {
  $src += '\*'
}

Copy-Item $src $dst -Recurse

或使用单独的复制语句,具体取决于目标文件夹是否存在:

if (Test-Path -LiteralPath $dst -Type Container) {
  Copy-Item '.\Foo\Bar\Baz\*' '.\Foo\Qux' -Recurse
} else {
  Copy-Item '.\Foo\Bar\Baz' '.\Foo\Qux' -Recurse
}