Если вы используете Get-ChildItem
, будьте очень осторожны.Лучший способ - передать объекты на Move-Item
, и вам не нужно больше об этом думать:
Get-ChildItem -recurse -path sub\WORK -filter "* OK" | Where-Object { $_.PSIsContainer } | Move-Item -destination sub\OK
(не нужно использовать Foreach-Object
)
ОсновнойПричина, по которой я отвечаю, заключается в следующем: Get-ChildItem
конструирует объект по-разному, в зависимости от параметров.Посмотрите на примеры:
PS C:\prgs\tools\Console2> gci -include * | % { "$_" } | select -fir 5
C:\prgs\tools\Console2\-verbose
C:\prgs\tools\Console2\1UpdateDataRepositoryServices.ps1
C:\prgs\tools\Console2\22-52-59.10o52l
C:\prgs\tools\Console2\2jvcelis.ps1
C:\prgs\tools\Console2\a
PS C:\prgs\tools\Console2> gci | % { "$_" } | select -fir 5
-verbose
1UpdateDataRepositoryServices.ps1
22-52-59.10o52l
2jvcelis.ps1
a
Тогда, если вы используете $_
в цикле и PowerShell необходимо преобразовать FileInfo
из Get-ChildItem
в строку, это даст разные результаты.Это произошло, когда вы использовали $_
в качестве аргумента для Move-Item
.Довольно плохо.
Я думаю, что есть ошибка, сообщающая об этом поведении.