Разбейте путь и удалите только последнюю часть (имя файла) Powershell - PullRequest
0 голосов
/ 22 января 2019

Я очень новичок в powershell, и сейчас я пытаюсь написать скрипт, который находит указанный путь к файлу в файле, извлекает только последнюю часть пути (имя файла) и перемещает его в то же место назначения, что и папка. содержащие его.

У меня есть функциональный скрипт, который делает то, что я хочу, осталось только то, что он не должен искать полный путь к указанному файлу. Потому что путь больше не верен. Нужно просто найти имя файла, найти и переместить его.

Это мой текущий скрипт:

    $source      = 'Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\Ursprung_test'
$destination = 'Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\24BHD'
$toDelete    = 'Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\ToDelete'
$pattern1    = 'AmbulatoryBloodPressure'
$pattern2    = 'RuheEKG'


# Erstellt Array mit pfad und filename
$allFiles = @(Get-ChildItem $source -File | Select-Object -ExpandProperty FullName)

foreach($file in $allFiles) {
    # Dateinhalt als Array
    $content = Get-Content -Path $file

    # Wählt Destinationspfad
        if ($content | Select-String -Pattern $pattern1 -SimpleMatch -Quiet)  
         {
        $dest = $destination
    }
    else {
        $dest = $toDelete
    }

    # Prüft ob Datei einen Pfad enthält
    $refCount = 0
    $content | Select-String -Pattern '(^.*)([A-Z]:\\.+$)' -AllMatches | ForEach-Object {


        $prefix  = $_.Matches[0].Groups[1].Value   
        $refPath = $_.Matches[0].Groups[2].Value   # Bitmap file Path wird geholt

        if (Test-Path -Path $refPath -PathType Leaf) {
            Write-Host "Moving referenced file '$refPath' to '$dest'"
            Move-Item -Path $refPath -Destination $dest -Force


        }
        else {
            Write-Warning "Referenced file '$refPath' not found"
        }
    }
    $refPath -split "\"
       $refPath[4]
    write-host $refpath

    # Bewegt die Files an die vorher festgelegte Destination.
    Write-Host "Moving file '$file' to '$dest'"
    Move-Item -Path $file -Destination $dest -Force
}

Это файл растрового изображения: enter image description here

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Чтобы получить имя файла, который вы хотите переместить, используйте Split-Path, как предлагает Марс.

$FileName = Split-Path $refPath -Leaf

Чтобы найти файл, используйте Get-ChildItem.($SearchBase - это путь, по которому вы хотите искать)

$FileLocation = (Get-ChildItem -Path $SearchBase -Filter $filename -Recurse -File).FullName

Теперь, чтобы переместить файл, используйте Move-Item и снова используйте Split-Path, чтобы найти пункт назначения.

Move-Item -Path $FileLocation -Destination $(Split-Path $file -Parent)
0 голосов
/ 22 января 2019

У вас есть несколько опций для экономии работы с путями к файлам и именами в PowerShell.

Встроенные командлеты

# Get the file name
$fileName = Split-Path $refPath -Leaf

# Get the directory path
$dirPath = Split-Path $refPath -Parent

.NET методы

# Get the file name
$fileName = [System.IO.Path]::GetFileName($refPath)

# Get the directory path
$dirPath = [System.IO.Path]::GetDirectoryName($refPath)

Если вы хотите найти имя файла в другом каталоге, вы можете создать новый путь, например:

# built-in version
$otherPath = Join-Path $otherDir $fileName

# .NET version
$otherPath = [System.IO.Path]::Combine($otherDir, $fileName)
...