Вы можете сделать что-то вроде следующего (я не могу проверить с помощью Expand-7Zip
):
$filePath = "s:\Download Data Feed\"
$zip = Get-ChildItem -File -Recurse -Path $filePath | Where-Object { $_.Extension -eq ".zip" }
foreach ($file in $zip) {
$target = Join-Path $filePath $file.BaseName
if (!(Test-Path $target -PathType Container)) {
$null = New-Item -ItemType Directory -Path $target
}
Expand-7Zip -ArchiveFileName $file -Password "Password" -TargetPath $target
}
Объяснение:
Каждый FileInfo
объект, содержащийся в коллекция $zip
имеет свойство BaseName
, которое является именем файла без расширения.
Join-Path используется для соединения пути с дочерним путем. Дочерний путь здесь будет равен BaseName
$file
во время каждой итерации.
Test-Path используется для проверки, если путь уже существует. Если путь $target
не существует, он будет создан из-за команды New-Item .
Еще один подход к получению пути к целевой папке - просто использовать заменить регулярное выражение, что, вероятно, более эффективно:
$target = $file.FullName -replace '\.zip$'