【发布时间】:2011-10-25 18:18:33
【问题描述】:
场景如下:我们有一个生产网络服务器,其中包含数千个文件和文件夹,这些文件和文件夹附加了一个“_DATE”。我们想将它们移动到一个临时文件夹(确保它们没有被使用),并在以后删除这些文件。
我可以使用:
Get-ChildItem -Path W:\IIS -Recurse | Where-Object{$_.Name -match "_\d{8,10}$"}
获取所有文件/文件夹及其位置的列表。但是手动删除它们似乎需要做很多工作,特别是如果将来需要这样做。我找到了一些几乎可以满足我要求的示例:
cls
$source = "W:\IIS"
$destination = "C:\Temp\DevTest"
foreach ($i in Get-ChildItem -Path $source -Recurse)
{
if ($i.Name -match "_\d{8,10}$")
{
Copy-Item -Path $i.FullName -Destination $item.FullName.ToString().Replace($source,$destination).Trim($item.Name)
}
}
还有:
cls
$source = "W:\IIS"
$destination = "C:\Temp\DevTest"
$bin = Get-ChildItem -Path $source -Recurse | Where-Object{$_.Name -match "_\d{8,10}$"}
foreach ($item in $bin) {
Copy-Item -Path $item.FullName -Container -Destination $item.FullName.ToString().Replace($source,$destination).Trim($item.Name) -Recurse
}
这两个的问题是,当我只用 copy-item 测试它们时,我最终会得到一个平面目录,我需要保留目录结构,以便如果移动出错我可以恢复(最好通过拖动和将所有文件夹放回 IIS 文件夹中),否则我会得到许多额外文件夹/文件的副本,这些文件夹/文件在我运行第一个命令时不会出现。
将我的第一个命令修改为:
Get-ChildItem -Path W:\IIS -Recurse | Where-Object{$_.Name -match "_\d{8,10}$"} | Copy-Item -Container -Destination C:\Temp\DevTest -Recurse
将复制我需要的所有内容,但使用平面目录树,而不是保留树结构(但用目标替换源目录)。
有什么建议/cmets?
【问题讨论】:
标签: regex powershell web