我想将文件从一个位置复制到另一个位置,这些文件应与源文件夹在同一个文件夹中。当我使用以下脚本时,它会复制文件,但不会复制源文件夹中的文件夹。有什么建议吗?
$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".
答案 0 :(得分: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
注意:
我没有使用-replace
运算符,因为它采用正则表达式,而正常的文件名字符(如\
对正则表达式很重要。
为什么不在一个管道中执行所有操作:
Get-ChildItem … | Where-Object … | Foreach-Object { $dest = …; Copy-Item … }
这可以避免为中间集合创建一个可能很大的数组 在下一个陈述中使用?
答案 1 :(得分:0)
Copy-Item -Path \\Server\Example -Container -Destination D:\Example -Force -Recurse