0

我想将文件从一个位置复制到另一个位置,并且这些文件应该与源文件位于同一文件夹中。当我使用以下脚本时,它会复制文件,但不会复制源文件夹中的文件夹。有什么建议么?

$a=Get-ChildItem C:\temp\_pdf_list -recurse | Where-Object {$_.name -like "*pdf" -and $_.name -notlike "*prth*"}

$a

foreach($x in $a) {copy-item  -path $x.FullName "c:\temp\_pdfs_ck" -whatif} 

请注意,目标路径不会按照我需要的方式将文件放入名为 1001 的子文件夹中。

输出:

What if: Performing operation "Copy File" on Target "Item: C:\temp\_pdf_list\1001\10010001.pdf Destination: C:\temp\_pdfs_ck\10010001.pdf".
4

2 回答 2

0

理想情况下,人们会使用类似的工具robocopy,但我从未尝试过同时使用包含(在源和目标文件夹之后添加参数)和独占(/xf pattern)文件名匹配。

要在 PowerShell 中执行此操作,您需要构建一个完整的输出路径:如果仅提供目标文件夹,则提供copy-item源文件名,但不提供相对路径。

所以,像:

$dest = $x.FullName.Replace('C:\temp\_pdf_list', 'c:\temp\_pdfs_ck')
copy-item -path $x.FullName -Destination $dest

笔记:

  1. 我没有使用-replace运算符,因为它需要一个正则表达式和普通的文件名字符(比如对正则表达式\很重要。

  2. 为什么不在一个管道中执行所有这些:

    Get-ChildItem … | Where-Object … | Foreach-Object { $dest = …; Copy-Item … }
    

    这避免了为您仅在下一条语句中使用的中间集合创建一个可能很大的数组?

于 2013-10-14T16:19:25.650 回答
0
Copy-Item -Path \\Server\Example -Container -Destination D:\Example -Force -Recurse
于 2020-05-26T15:14:09.473 回答