Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net &引用;CreateFromDirectory";加上;4“;论点:“;该路径不是合法形式。”;_.net_Powershell 3.0 - Fatal编程技术网

.net &引用;CreateFromDirectory";加上;4“;论点:“;该路径不是合法形式。”;

.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 =

我正在尝试将一个月的文件夹压缩到一个文件中。例如,201501适用于jan的所有文件夹,我需要压缩到名为somename-2015-jan.zip的文件。所有其他逻辑仅在显示上述错误的zipplig部分工作。我有powershell v3和Net4.54,当我调用System.IO.Compression.ZipFile]时出现了一些问题:CreateFromDirectory来压缩文件

                  $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)