Как я могу перемещать элементы без жестко закодированных переменных - PullRequest
0 голосов
/ 04 июня 2019

Я хочу переместить элементы с расширением .txt , но не так, жестко запрограммировано.Я хочу выбрать из папки все файлы с некоторым расширением и переместить их в папку с тем же именем, что и расширение.И я хочу сделать это для всех расширений в каталоге.

Есть идеи?Спасибо!

Посмотрите на мой код, но я сделал это с помощью жестко закодированных переменных

$variable=Get-ChildItem -Path "C:\somePath"

foreach ($variables in $variable)
{

   if($extension=($variables | Where {$_.extension -like ".txt"}))
   {

        New-Item -ItemType Directory -Path "C:\somePath\text"
        $extension | Move-Item -Destination "C:\somePath\text"
   }
}

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Хотя это решение выглядит не так чисто, как другое, оно обрабатывает случай, когда целевые папки еще не существуют. Он также перемещает файлы, которые могут содержать специальные символы, такие как []. Он также явно игнорирует файлы без расширения, поскольку для них не предъявляется никаких требований. Количество циклов сводится к минимуму благодаря использованию Group-Object.

$Path = "C:\Somepath"
$files = Get-ChildItem -Path $Path -File |
    Group-Object -Property {($_.extension |
        Select-String -Pattern "[^. ]+").matches.value
    }
Foreach ($ExtGroup in $files) {
    $Destination = "$Path\$($ExtGroup.Name)"
    if (!(Test-Path -Path $Destination -PathType Container)) {
        $null = New-Item -Path $Destination -Type Directory
    }
    Move-Item -LiteralPath $ExtGroup.Group -Destination $Destination -Force
}
0 голосов
/ 04 июня 2019

Я верю, что это подойдет:

$variable = Get-ChildItem -Path "C:\somePath"
foreach ($v in $variable){
$dest = '{0}\{1}' -f  $v.DirectoryName, ($v.Extension -replace '^\.')
$v  | Move-Item -Destination $dest -Force
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...