Powershell находит и перемещает файл

#powershell #find #move

#powershell #Найти #переместить

Вопрос:

У меня есть длинный список операций поиска и перемещения, я хочу сократить сценарий, заменив следующие 2 длинные команды на 2 короткие переменные.

Короткие переменные:

 $f = 'Get-ChildItem -Recurse -Filter'
$m = 'Move-Item -Force -Verbose -Destination V:MSL_pdf'
  

Длинные команды:

 Get-ChildItem -Recurse -Filter GAS*.pdf | Move-Item -Force -Verbose -Destination V:MSL_pdfGAS
Get-ChildItem -Recurse -Filter GCA_00*.pdf | Move-Item -Force -Verbose -Destination V:MSL_pdfGCAGCA_00
Get-ChildItem -Recurse -Filter GCA_01*.pdf | Move-Item -Force -Verbose -Destination V:MSL_pdfGCAGCA_01
  

И это не работает:

 $f GAS*.pdf | $m`GAS
$f GCA_00*.pdf | $m`GCAGCA_00
$f GCA_01*.pdf | $m`GCAGCA_01
  

Комментарии:

1. для этого и существуют функции … [ усмешка ]

Ответ №1:

Как сказал @Lee в комментарии, вы должны использовать функцию:

 function GetAndMove($files, $dest)
{
   $dest = "V:MSL_pdf$($dest)"
   Get-ChildItem -Recurse -Filter $files | Move-Item -Force -Verbose -Destination $dest
}

# Now call the function
GetAndMove "GAS*.pdf" "GAS"
GetAndMove "GCA_00*" "GCAGCA_00"
GetAndMove "GCA_01*" "GCAGCA_01"
  

Комментарии:

1. Поскольку у меня теперь есть более 50 строк GetAndMove, могу ли я поместить одну функцию GetAndMove в начало и получить массив только с параметрами?

2. Да, в функции получаем массив, зацикливаемся на нем и выполняем перемещение, затем вызываем его один раз и отправляем массив.

3. Не могли бы вы быть так любезны, чтобы на самом деле написать такой код, большое спасибо