【问题标题】:Powershell Copy-Item copies contents of UNC subdirectory which cannot copy onto leafPowershell Copy-Item 复制无法复制到叶子的 UNC 子目录的内容
【发布时间】:2017-12-04 09:50:33
【问题描述】:

对于我重新定义此问题的以下术语可能引起的混淆,提前道歉;

  • 目录(顶级目录)
  • 子目录(顶级目录下的目录)
  • sub_subdirectory(子目录的子目录)
  • 目录内容(文件和子目录)
  • 子目录的内容(文件和子子目录)

问题

我正在尝试使用 Windows 7 Powershell 3.0 Copy-Item 函数将一个目录的六个子目录复制到另一个目录中;相当简单的东西。请注意,这些目录位于网络上,其 UNC 路径已映射到 Windows 环境中的驱动器,如: H:\ = \\servername\path

在以下示例中,顶层目录本身被复制,而不仅仅是其内容(恰好是六个子目录及其内容)

$from = "H:\temp\toplvl_dir - backup"

$to = "H:\temp\newdir"

Copy-Item $from -Destination $to -Recurse

# Creates:
# H:\temp\newdir\toplvl_dir - backup

这是不可取的。 在使用“*”后缀 $from = "H:\temp\toplvl_dir\* " 借用 David-Tchepak solution 的格式方面取得了进展,部分原因在于它确实只复制了内容......

$from = "H:\temp\toplvl_dir - backup\*"

$to = "H:\temp\newdir"

Copy-Item $from -Destination $to -Recurse

# Creates:
# H:\temp\newdir\{copied contents of .\toplvl_dir - backup\NN_subdir\}

...但不幸的是,这些内容源自低于所需级别的一级:即子目录.\toplvl_dir - backup\NN_subdir\的内容,而不是目录 .\toplvl_dir... 上面示例中的$from 目录实际上包含六个子目录"\01_subdir", "\02_subdir"...."\06_subdir",每个子目录都包含一个相同的“树”,该“树”由一个单独的子目录组成,该子目录本身包含大量文件。完整路径如下所示;

e.g. H:\temp\toplvl_dir - backup\NN_subdir\lone_subdirectory\{lots of files}

Copy-Item 似乎试图复制 sub_subdirectorylone_subdirectory,为每个NN_subdir 报告错误; “无法将容器复制到现有的叶项”。到目前为止,我了解NN_subdir 的内容在第一个01_subdir 之外的每个副本迭代都是lone_subdirectory 的重复,这将导致目录名称冲突,但我不明白为什么应用语法, Copy-Item 正在尝试复制 sub_subdirectories 而不是 子目录 .\toplvl_dir - backup\NN_subdir\

如何简单地调用Copy-Item 来复制顶级目录的内容 .\toplvl_dir - backup\*.\newdir 即六个子目录本身内容!?

如果我期望能够通过对Copy-Item 的单行调用完成此操作,请随意说?

# Desired Result using a one-line call to Copy-Item:
H:\temp\newdir\01_subdir\lone_subdirectory\{lots of files}
H:\temp\newdir\02_subdir\lone_subdirectory\{lots of files}
H:\temp\newdir\03_subdir\lone_subdirectory\{lots of files}
H:\temp\newdir\04_subdir\lone_subdirectory\{lots of files}
H:\temp\newdir\05_subdir\lone_subdirectory\{lots of files}
H:\temp\newdir\06_subdir\lone_subdirectory\{lots of files}

:-S

【问题讨论】:

  • 你能在没有通配符的情况下运行相同的命令吗? $from = "H:\temp\toplvl_dir - backup\"

标签: powershell powershell-3.0


【解决方案1】:

澄清一下,如果我有这样的文件夹结构:

C:\src\01\lone\a.txt
C:\src\02\lone\b.txt
C:\dest

您正在寻找 1 行 Copy-Item 命令来生成如下所示的目录结构?

C:\dest\01\lone\a.txt
C:\dest\02\lone\b.txt

正确吗?如果是这样,这个命令对我有用(尽管是 Win7,PS 版本 5):

Copy-Item -Path 'C:\src\*' -Destination 'C:\dest' -Recurse

【讨论】:

  • 是的,谢谢你已经完美地解释了我想要做的事情。
  • 所以我在我本地的C:\ 上创建了你的结构的镜像,下一部分令人困惑;我在H:\ 中创建了一个语法建议的 ps1 脚本,这是一个网络驱动器(强制做法),以及一个初步的del .\dest cmd 以清除先前的尝试。从H:\do_copy.ps1 运行脚本,产生了熟悉的叶子错误。 然后,在本地运行一个ps1脚本,C:\do_copy.ps1成功的; 一次!但是重新运行H:\do_copy.ps1后,不成功,本地脚本C:\do_copy.ps1的后续运行不成功...
  • #do_copy.ps1 if (Test-Path 'C:\dest') { Remove-Item 'C:\dest' - Recurse } Copy-Item -Path 'C:\src\*' -Destination 'C:\dest' -Recurse
  • 您似乎正在删除目标目录及其内容。也许尝试修改您的脚本,添加以下内容:#do_copy.ps1 if (Test-Path 'C:\dest') { Remove-Item 'C:\dest' - Recurse } New-Item 'C:\dest' Copy -Item -Path 'C:\src\*' -Destination 'C:\dest' -Recurse
  • 谢谢迦勒!我觉得自己很傻,我爱你。这对我有用; New-Item 'C:\dest' -ItemType 'directory'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多