【发布时间】:2011-03-19 02:28:21
【问题描述】:
我有一个 Web 应用程序,可以在服务器上生成和上传文档(word、pdf 等)。现在我正在编写一个 power shell 脚本,它将首先将这些文件传输到一个 ftp 文件夹。这部分完成了。第二个脚本每天都会在我的备份服务器上运行,并将所有文件夹/文件从该 ftp 服务器下载到我的备份服务器。问题是我无法下载文件夹。它很容易下载文件,但我似乎找不到任何基本上可以让我下载整个文件夹(包含内容)或至少让我遍历文件夹内容的代码。
如果我知道文件夹,那么我不会有问题,我可以为每个文件夹硬编码一个函数,但文档会上传到动态文件夹(文件夹名称由应用程序生成)。我只知道主文件夹。我需要遍历它。并且压缩不是一个好主意,因为文件夹大小约为 1 Gig。不想每天通过网络传输 1 个演出。
在这方面的任何帮助将不胜感激。
谢谢。
-----------更新--------
gci 仅适用于本地系统上的文件(我在这里可能错了)。我指的是遍历 ftp 文件夹和文件。
这是我在本地通过 gci 的方式: $GciFiles = gci C:\ParentFolder\SubFolder\ -recurse |其中 {$_.attributes -ne "目录"}
foreach ($GciFiles 中的$file) {}
现在这一切都很花哨,因为 foreach 也可以给我文件夹名和文件名。但是我想对 FTP 代码做同样的事情:
$ftphost = "ftplocation\父文件夹\" 凭据在这里 制作一个 ftp_web_request 对象
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectory $ftpresponse = $ftprequest.GetResponse() $responseStream = $ftpresponse.GetResponseStream() $readStream = new-object System.IO.StreamReader $responseStream
while (($line = $readStream.ReadLine() ) -ne $null) { $line 这里给了我们文件的名字 #函数下载文件 }
现在这一切都很好,只要我知道我想从中下载文件的文件夹。但是,正如我之前所说,我只知道具有未知数量文件夹的父文件夹(它们的名称是由应用程序创建的 GUID)和在每个 GUID 文件夹中都有一些文件。
现在我到底应该如何在该代码上使用 GCI ???
我所做的是在相同的代码上,首先获取每个文件夹的名称,然后有另一个函数(除了现在我知道文件夹名称之外相同)并在该函数上循环下载文件。但是它不起作用。脚本只是继续执行。我是深水!不知道该怎么办!
【问题讨论】:
-
我不确定我是否理解。 Get-ChildItem 应该遍历文件夹和文件。你能发布一个你如何访问你的 ftp 站点的代码 sn-p 吗?
标签: powershell ftp download directory