如何递归归档PowerShell中文件夹中的每个文件?

时间:2011-07-29 11:38:56

标签: powershell ftp zip archive

我有一个文件夹里面有很多文件和文件夹。我想通过ftp将该文件夹发送到远程主机。我认为Windows ftp客户端无法做到,所以我决定归档所有文件(进入某些zip或其他),然后通过ftp发送一个文件。我怎么能在powershell(2.0)中做到这一点?压缩并不重要,重要的是只有1个文件。

提前感谢。

3 个答案:

答案 0 :(得分:1)

因此,您可以递归获取文件夹的文件。在此之后,您可以将它们添加到您的ziparchive并通过FTP发送。 Powershell不是归档文件的功能。但是有一些外部工具。好的是来自7zip和dll SharpZipLib的命令行。

$itemslist = Get-ChildItem C:\\folder -recurse
$filelist = New-Object System.Collections.ArrayList

foreach ($item in $itemslist)
{
    if ($item.GetType().FullName -eq 'System.IO.FileInfo')
    {
        $filelist.Add($item)
    }
}

foreach ($file in $filelist)
{
    //Add file to your ZipArchive
}

//Send ZipArchive

答案 1 :(得分:0)

答案 2 :(得分:0)

使用DotNetZip非常简单。

[System.Reflection.Assembly]::LoadFrom("c:\\dev\dotnet\\Ionic.Zip.dll");

$directoryToZip = "c:\\temp";
$zipfile = new-object Ionic.Zip.ZipFile;
$zipfile.AddEntry("Readme.txt", "This is a zipfile created from within powershell.")
$zipfile.AddDirectory($directoryToZip, "home")
$zipfile.Save("ZipFiles.ps1.out.zip");
$zipfile.Dispose();

作为the ZipFile.AddDirectory() method的一部分,ZipFile对象为您执行递归。

DotNetZip是一个免费的图书馆。


一个附加注释 - 作为软件版本的一部分,我有理由在过去进行FTP上传。我发现在连续上传时,大多数文件都没有改变。所以我介绍了一个“目录”文件,它将每个文件的MD5哈希映射到它的名字。在上传之前,我会下载目录,然后根据磁盘上的文件MD5检查表中的每个MD5。如果匹配,则无需上传该特定文件。这节省了大量的时间和数据传输。

尽管如此,我没有PowerShell脚本。 :其中