.net &引用;CreateFromDirectory";加上;4“;论点:“;该路径不是合法形式。”;
我正在尝试将一个月的文件夹压缩到一个文件中。例如,201501适用于jan的所有文件夹,我需要压缩到名为somename-2015-jan.zip的文件。所有其他逻辑仅在显示上述错误的zipplig部分工作。我有powershell v3和Net4.54,当我调用System.IO.Compression.ZipFile]时出现了一些问题:CreateFromDirectory来压缩文件.net &引用;CreateFromDirectory";加上;4“;论点:“;该路径不是合法形式。”;,.net,powershell-3.0,.net,Powershell 3.0,我正在尝试将一个月的文件夹压缩到一个文件中。例如,201501适用于jan的所有文件夹,我需要压缩到名为somename-2015-jan.zip的文件。所有其他逻辑仅在显示上述错误的zipplig部分工作。我有powershell v3和Net4.54,当我调用System.IO.Compression.ZipFile]时出现了一些问题:CreateFromDirectory来压缩文件 $year = 2015 $base =
$year = 2015
$base = "D:\Archive\"
$folder = Get-Content "D:\Archive\MasterFolder.txt"
#write-host $folder.count total lines read from file
foreach ($Fname in $folder)
{
$yearmonth = Get-Content "D:\Archive\duration.txt"
write-host $yearmonth.count total lines read from file
foreach ($date in $yearmonth)
{
$source = "$base$Fname\$date*"
#[string]$text = "$date"
$string = $date
#201501
$mmd = $string.Substring(4,2)
Write-host "fffcmd $mmd"
if ($mmd -gt 12) {
"$mmd is bigger than 12 Which is not valid,Please Correct The file name durations.txt and run the command again"
break
}
Else {
write-host " This is Source Folder Name !!!!!!!!!!!!!!!!!!!!$source"
switch($mmd)
{
"01" {$mm = "jan"
write-host "New mm is $mm"
}
"02" {$mm = "Feb"
write-host "New mm is $mm"
}
"03" {$mm = "Mar"
write-host "New mm is $mm"
}
"04" {$mm = "Apr"
write-host "New mm is $mm"
}
"05" {$mm = "May"
write-host "New mm is $mm"
}
"06" {$mm = "Jun"
write-host "New mm is $mm"
}
"07" {$mm = "Jul"
write-host "New mm is $mm"
}
"08" {$mm = "Aug"
write-host "New mm is $mm"
}
"09" {$mm = "Sep"
write-host "New mm is $mm"
}
"10" {$mm = "Oct"
write-host "New mm is $mm"
}
"11" {$mm = "Now"
write-host "New mm is $mm"
}
"12" {$mm = "Dec"
write-host "New mm is $mm"
}
default
{
Write-host "The Month Duration $mmd is not valid";continue
}
}
$destination = "$base$Fname\$Fname-$year-$mm.zip"
write-host " Destination $destination"
Add-Type -assembly "system.io.compression.filesystem"
function ZipFiles( $zipfilename, $sourcedir )
{
[Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem")
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir,
$zipfilename, $compressionLevel, $false)
}
ZipFiles "$destination", "$source"
}
start-sleep -s 1
}
}
看起来提供参数的方式不正确,或者源代码中的通配符不正确。
CreateFromDirectory
不允许使用通配符。改用Get ChildItem
排队后
$source = "$base$Fname\$date*"
将匹配的文件传递到foreach
循环:
$files = (Get-ChildItem "$base$Fname\$date*")
foreach ($file in $files) {
# ...
# Continue with the rest of your code, starting at the line "$string = $date"
# ...
ZipFiles $destination, $file.FullName
}
其他一些建议:
ZipFiles
函数定义移到foreach
循环之外,它不需要在每次循环运行时重新定义System.IO.Compression.FileSystem
移动到foreach
es之外switch
语句,并将其替换为以下内容:$mm=[CultureInfo]::CurrentCulture.DateTimeFormat.Get缩写月名($mmd)