Это показывает, как много вещей, происходящих здесь, для такой простой задачи и этих имен zip-файлов, не имеют расширения zip и, следовательно, не рассматриваются файловой системой как zip-файлы.Тем не менее, это ваш выбор, конечно.
Я бы предложил переместить эту строку даты в базовое имя файла и использовать обычное расширение zip, то есть слева от периода.Это облегчает выполнение того, что вам нужно, иначе у вас есть дополнительная работа для обработки ненормального расширения.Например, переименование файла, которое вы, похоже, делаете.
Каждый раз, когда вы выходите за рамки 3–5 операторов if, пришло время использовать вместо этого «Switch».Посмотрите примеры фрагментов, предоставленных в ISE для этой идеи, или ...
Get-Help -Name About_Switch -Examples
Get-Help -Name About_Switch -Full
Get-Help -Name About_Switch -Online
С этим множеством выборов, хотя, вероятно, пришло время переосмыслить ваш подход.
Ниже не проверено, так как у меня нетТипы файлов, например, те, которые вы показываете, так что настройте их по необходимости.
Для варианта назначения и распакуйте сценарий использования.Попробуйте что-то вроде этого в качестве основы, чтобы начать.Конечно, добавьте любую дополнительную обработку имени ошибки / сообщения / строки, которая вам требуется.
# Unpack archives from source to destination
Function Expand-ZipFile
{
[CmdletBinding()]
[Alias('ezf')]
<#
Set parameters to allow for passing in the function call
or if a parameter is not passed, prompt the use for it.
#>
Param
(
[String]$SourcePath = (Read-Host -Prompt 'Enter the full path of a root source folder'),
[String]$DestinationPath = (Read-Host -Prompt 'Enter the full path to the root destination folder.')
)
# Initialize the .Net compression namespace
Add-Type -AssemblyName System.IO.Compression.FileSystem
# Get all zipfiles in a source folder.
'Collecting all the zip files from the source folder.'
$ZipFiles = Get-ChildItem -Path $Source -Filter '*.zip'
ForEach ($ZipFile in $ZipFiles)
{
<#
Set the destination name using the destination path and add a sub folder
using the basename of the zip file
#>
'Initializing zip destination path'
$ZipPath = New-Item -Path "$DestinationPath\$($ZipFile.BaseName)" -ItemType Directory -WhatIf
# Extract to zip destination path
"Extacting zip file to the zip destination path names: $ZipPath"
[System.IO.Compression.ZipFile]::ExtractToDirectory($($ZipFile.FullName), $($ZipPath.FullName))
}
}
# .Example use case
Expand-ZipFile -SourcePath 'D:\SourcePath' -DestinationPath 'E:\DestinationPath'
Обновление для OP
Что касается…
Не могли бы вы дать мне пример того, как применить REGEX или SUBSTRING с помощью функции выше.
Снаружи или внутри функции, это просто конвейер в файле, затемприменить строку извлечения.
'FILE1ZIP_nightly_yyyyddmm', 'FILE1ZIP_monthly_yyyymmdd' | %{$_.SubString(0,8)}
FILE1ZIP
FILE1ZIP