Я смоделировал каталог с этими файлами:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 4/25/2018 11:07 AM 3 CICone NT Setup 0.25.5-dev-build.exe
-a---- 4/25/2018 11:07 AM 3 CICone NT Setup 0.25.4-UAT-build.exe
-a---- 4/25/2018 11:07 AM 3 CICone NT Setup 0.25.3-UAT-build.exe
-a---- 4/25/2018 11:07 AM 3 CICone NT Setup 0.25.3-dev-build.exe
Ваш первый запрос нашел два файла .exe с наибольшим номером по этому пути, это просто.
>get-childitem *.exe | Sort-Object -Descending -Property Name | Select-Object -First 2
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 4/25/2018 11:07 AM 3 CICone NT Setup 0.25.5-dev-build.exe
-a---- 4/25/2018 11:07 AM 3 CICone NT Setup 0.25.4-UAT-build.exe
Следующий шаг - сохранить этот список файлов в переменной с именем $files
следующим образом.
>$files = get-childitem *.exe | Sort-Object -Descending -Property Name | Select-Object -First 2
Теперь, чтобы пройтись по ним и разобрать окружение.
PowerShell - это объектно-ориентированный язык сценариев, который позволяет нам выбирать свойства объектов (в данном случае свойство .Name
каждого файла) и затем воздействовать на эти свойства, вызывая методы для них. Мы можем использовать метод .Split()
, чтобы разбить строку на каждый экземпляр символа. Например, если мы хотим разделить наши файлы на символе -
, мы можем сделать это следующим образом:
>$file.Name.Split('-')
CICone NT Setup 0.25.4
dev
build.exe
Затем мы можем выбрать второй в списке, используя индексную нотацию, как показано ниже (0 = первая позиция, 1 = вторая позиция и т. Д.)
>$file.Name.Split('-')[1]
dev
Объединение всех этих концепций в сценарий для начала работы:
$files = get-childitem *.exe | Sort-Object -Descending -Property Name | Select-Object -First 2
ForEach ($file in $files){
$EnvironmentSubstring = $file.Name.Split('-')[1]
"this file $($file.Name) should go to .\$EnvironmentSubstring\"
}
Запуск, который даст следующий вывод:
this file CICone NT Setup 0.25.5-dev-build.exe should go to .\dev\
this file CICone NT Setup 0.25.4-UAT-build.exe should go to .\UAT\
Здесь вам просто нужно выяснить, какую команду использовать для копирования файла. PowerShell использует соглашение об именовании Verb-Noun
, поэтому я дам вам подсказку, что вам нужно научиться использовать Copy-Item
. Вы можете запустить Get-Help Copy-Item -Examples
, чтобы увидеть подробные примеры использования каждого командлета в PowerShell, запустив его из приглашения.