对你们来说可能很容易。
我想复制此路径中的所有文件夹和文件c:\ default \ 到目的地c:\ environment \ customfolder \ 在文件夹customerfolder中是其他具有不同名称的文件夹。 它应该只将文件和文件夹复制到目标位置自定义文件夹包含名称DEMO_test
最好和最简单的方法是什么? 我应该使用for-each吗?
抱歉,我应该更清楚。 ; - )
我有一个文件夹c:\ default
该文件夹中的所有文件和子文件夹c:\ default
应该复制到这些文件夹
C:\环境\ customfolder \ demo_test
C:\环境\ customfolder \ demo_test01
C:\环境\ customfolder \ demo_test02
C:\环境\ customfolder \ demo_test03
我知道应该可以从此路径复制所有文件和子文件夹(来源)c:\ default \
到此路径(目标)c:\ environment \ customfolder \
如果他们有名称(如)demo_test *
,则只将其复制到文件夹中这个问题更好吗?
感谢。
答案 0 :(得分:2)
获取文件列表:
Get-ChildItem -Path "C:\default\" -Recurse
-Recurse
参数搜索子文件夹。
现在过滤列表以仅显示符合特定模式的文件
Get-ChildItem -Path "C:\default\" -Recurse |
Where-Object Name -like "*test*"
请注意,管道|
实际上将这些命令链接在一起。
现在将已过滤的项目列表复制到目标文件夹:
Get-ChildItem -Path "C:\default\" -Recurse |
Where-Object Name -like "*test*" |
Copy-Item -Destination "C:\destination\"
答案 1 :(得分:0)
如果我理解你,你有完整的目录结构: 资源: c ^ \目录[lookupCatalogs] \文件 DEST: C:\目录\ SomeCatlogs [lookupCatalogs] \文件
如果是,
这个功能应该没问题:
function copy-TestdemoFolders
{
param ($source,
$destination,
$filter,
$recursive = $false)
$folders = Get-ChildItem $source -filter $filter -Directory
$folders | % {
$copyPath = Join-Path $destination $_.name
if (!(Test-Path $copyPath))
{
New-Item $copyPath -ItemType Directory | Out-Null
"Created New Folder: $($_.name)"
}
$scriptBlock = { Get-ChildItem $_.Fullname }
if ($recursive -eq $true)
{
$scriptBlock = { Get-ChildItem $_.Fullname -Recurse }
}
Invoke-Command -ScriptBlock $scriptBlock | %{
Copy-Item $_.Fullname $copyPath -ErrorAction SilentlyContinue
if (!($?)) { $error[0].Exception.Message }
}
}
}
copy-TestdemoFolders -source 'C:\Source' -filter "*demo_test*" -destination D:\TEST
您可以使用开关copy-TestdemoFolders -source 'C:\Source' -filter "*demo_test*" -destination D:\TEST -recursive:$true