我想通过PowerShell脚本每天移动文件夹。这些文件夹以" 2013-09-11"的形式命名。等等 文件夹可能包含多个文件,我想将它们从网络共享移动到另一个文件。
$SourceDir = "H:\Source\"
$DestinationDir = "G:\Destination\"
$dir = dir $SourceDir | ?{$_.PSISContainer}
foreach ($d in $dir | where-object {$_.Directory.Name -like "YYYY-MM-DD"})
{
ForEach-Object{Move-Item $_ $DestinationDir}
}
如何告诉PowerShell将foldername与上述模型进行比较?
编辑:此外,是否有一种在给定时间每天运行此脚本的好方法?
EDIT2:我还想根据名字中的年份将文件夹放在子文件夹中。所以文件夹" 2013-09-11"应移至" G:\ Destination \ 2013"以及其他一切相应的。如果尚未创建年份文件夹,则应创建该文件夹。我怎样才能做到这一点?
答案 0 :(得分:1)
你可以这样试试:
$SourceDir = "SourceDir"
$DestinationDir = "DestDir"
$dir = dir $SourceDir | ?{$_.PSISContainer}
$dir | ? {$_.Name -match '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'} | % {
$source = $SourceDir +$_
Move-Item $source $DestinationDir
}
'^ [0-9] {4} - [0-9] {2} - [0-9] {2} $'是一个正则表达式,它只匹配您上面提到的模式。 ^是行的开头,$是行的结尾。 [0-9]表示只允许数字,{n}是量词。
答案 1 :(得分:0)
好的,我现在得到了答案:
$SourceDir = "H:\Source\"
$DestinationDir = "G:\Destination\"
$dir = dir $SourceDir | ?{$_.PSISContainer}
$dir | ? {$_.Name -match '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'} | % {
$pastePath = ""
$yearDir = $_.Name.substring(0,4)
$pastePath = $DestinationDir + $yearDir
if (-not (Test-Path $pastePath ) -and ($yearDir.length -eq 4))
{
md $pastePath
}
$source = $SourceDir + $_
cp -Recurse $Source $pastePath -Force
rm $Source -Recurse -Force -Confirm: $false
}
这将从源获取文件夹,如果目标中没有此类文件夹,则创建具有年份的文件夹。然后它会将其复制到目标文件夹并删除源的内容。我选择复制文件是因为您无法自动覆盖文件夹。