Использование имени файла для переменной и перемещение похожих файлов с помощью Powershell - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь написать скрипт powershell, который будет искать каталог (c: \ Temp) и искать файлы с расширениями .fin.Если он находит файл с расширением fin, мне нужно переместить все файлы с теми же первыми семью символами этого файла fin в другой каталог (c: \ Temp \ fin).В этом каталоге может быть несколько файлов .fin одновременно с файлами, которые необходимо переместить.Я пробовал несколько разных вещей, но я новичок во всем этом.Я использовал только очень простые сценарии или команды PowerShell.Хотя это может быть основным (не уверен), я не знаю, с чего начать.

1 Ответ

0 голосов
/ 01 июля 2019

Вам нужно будет дважды вызвать Get-ChildItem.Первый раз, чтобы получить шаблон, который вы хотите сопоставить с именами файлов, и второй, чтобы получить файлы.Затем вы можете передать результаты второй команды в Move-Item.Вот пример того, как это сделать:

[CmdletBinding()]
param(
    $DirectoryToScan,
    $ExtensionToMatch = ".fin",
    $TargetDirectory
)

$Files = Get-ChildItem -Path $DirectoryToScan -File

foreach ($File in $Files) {
    if($File.Extension -eq $ExtensionToMatch) {
        $PatternToMatch = "$($File.BaseName.Substring(0, 7))*$ExtensionToMatch"
        Write-Verbose "PatternToMatch: $PatternToMatch"
        $MatchedFiles = Get-ChildItem -Path $DirectoryToScan -Filter $PatternToMatch
    }

    $MatchedFiles | Move-Item -Destination $TargetDirectory
}

Если вы сохраните вышеприведенное в файл с именем Move-MatchingFiles.ps1, вы можете передать свои параметры Moving-MatchingFiles.ps1 -DirectoryToScan C:\Temp -TargetDirectory C:\Temp\fin.Параметр ExtensionToMatch является необязательным и необходим только в том случае, если вы хотите переместить файл другого типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...