Использование PowerShell для перемещения соответствующего набора файлов с одинаковыми именами, но с разными расширениями, в два разных места назначения - PullRequest
1 голос
/ 26 мая 2011

Я хотел бы использовать PowerShell для перемещения набора файлов с одинаковыми именами (1 файл задания и 1 файл триггера с одинаковыми именами, но с разными расширениями) из одного каталога в другой. Смотрите пример ниже.

Исходный каталог содержит job1.zip, job1.trg, job2.zip и job2.trg. Я хотел бы взять совпадающие имена заданий job1.zip и job1.trg и переместить его в dest1folder, только если он пуст, если не переместить его в dest2folder. Затем вернитесь назад, чтобы выполнить ту же логику для 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 Ответ

2 голосов
/ 26 мая 2011

Не проверено, но я считаю, что это должно работать:

$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
    }
   }
...