Классифицировать расширение файла и применять логику - PullRequest
0 голосов
/ 27 мая 2019

Требуется выполнить логику в зависимости от расширения файла.

Ввод: $FileName = "ABC.tar.gz.manifest" or "ABC.tar.gz" or "ABC.zip"

$EXTZ = ".zip"
$EXTGZ = "tar.gz"
$EXT = $FileName -match "$EXTZ"

$EXT
if ($EXT = 'True') {
    Write-Host "$EXTZ"
} elseif ($EXT = 'False') {
   Write-Host "$EXTGZ"
}

Но проблема в том, что некоторые файлы имеют двойное расширение.Как мы можем решить эту проблему?

Если расширение .zip, нужно напечатать «ABC».

Если расширение файла .tar.gz или .tar.gz.manifest, необходимо напечатать "XYZ".

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Вы можете проверить, содержит ли $fileInfo расширение (у вас есть проблема в if, в PowerShell вы не можете сделать =, вы делаете -eq):

$Filename = "ABC.tar.gz.manifest"
$EXTGZ = "tar.gz"
$EXT = $Filename.Contains($EXTGZ)
if($EXT -eq $true)
{
   # Do Something
}
0 голосов
/ 27 мая 2019

Я бы использовал регулярное выражение и switch вместо нескольких, если команды

## Q:\Test\2019\05\27\SO_56322763.ps1

foreach ($FileName in ("ABC.tar.gz.manifest","ABC.tar.gz","ABC.zip","foo.bar")){
    "`$FileName is: {0}" -f $FileName

    switch -regex ($FileName){
        "\.tar\.gz(\.manifest)?$" {"XYZ";Break}
        "\.zip$"                  {"ABC";Break}
        default                   {"anything"}
    }
}

Пример вывода:

> Q:\Test\2019\05\27\SO_56322763.ps1
$FileName is: ABC.tar.gz.manifest
XYZ
$FileName is: ABC.tar.gz
XYZ
$FileName is: ABC.zip
ABC
$FileName is: foo.bar
anything
...