使用PowerShell将具有相同名称但不同扩展名的匹配文件集移动到两个不同的目标

时间:2011-05-26 14:32:15

标签: powershell directory matching

我想使用PowerShell将一个匹配的名称文件集(1个作业文件和1个触发器文件,从一个目录移动到另一个目录,只有不同的扩展名)。见下面的例子。

源目录包含job1.zip,job1.trg,job2.zip和job2.trg。我想将匹配的作业名称job1.zip和job1.trg移动到dest1文件夹,只有它是空的,如果没有移动到dest2文件夹。然后循环返回以对job2.zip和job2.trg执行相同的逻辑。我还必须考虑的一件事是Source目录可能只包含job1.zip等待job1.trg被传输。我是PowerShell的新手,并试图让它工作没有成功。有可能吗?

这是我到目前为止所拥有的。我使用IF逻辑将文件移动到每个目标文件夹,但它会移动源目录中的所有文件。

$doirun = (get-childItem "d:\ftproot\pstest\").Count

$filecount = (get-childItem "d:\ftproot\ps2\").Count

if ($doirun -le 1) {exit} 

$dir = get-childitem "d:\ftproot\pstest\" | Where-Object {($_.extension -eq ".zip") -or ($_.extension -eq ".trg")}

foreach ($file in $dir)
{
   if ($filecount -le 2) {Move-item "d:\ftproot\pstest\$file"  "d:\ftproot\ps2\"} 
   else {Move-item "d:\ftproot\pstest\$file" "d:\ftproot\ps3\"}
}

1 个答案:

答案 0 :(得分:2)

未经过广泛测试,但我认为这应该有效:

$jobs = gci d:\ftproot\pstest\* -include *.zip,*.trg |
  select -expand basename | sort -unique
$jobs |foreach-object {
 if (test-path d:\ftproot\pstest\$_.zip -and test-path d:\ftproot\pstest\$_.trg){
  if (test-path d:\ftproot\pstest\ps2\*){
    move-item d:\ftproot\pstest\$_.zip d:\ftproot\pstest\ps3
    move-item d:\ftproot\pstest\$_.trg d:\ftproot\pstest\ps3
    }
  else {
    move-item d:\ftproot\pstest\$_.zip d:\ftproot\pstest\ps2
    move-item d:\ftproot\pstest\$_.trg d:\ftproot\pstest\ps2
    }
   }