我有一个Web应用程序,可以在服务器上生成和上传文档(word,pdf等)。现在我正在编写一个电源shell脚本,它将首先将这些文件传输到ftp文件夹。这部分完成了。第二个脚本将每天在我的备份服务器上运行,并将该ftp服务器中的所有文件夹/文件下载到我的备份服务器。问题是我无法下载文件夹。它很容易下载文件,但我似乎无法找到任何基本上让我下载整个文件夹(带内容)或至少让我遍历文件夹内容的代码。
如果我知道文件夹然后我就不会有问题,我可以为每个文件夹硬编码一个函数,但文档会上传到动态文件夹(文件夹名称由应用程序生成)。我只知道主文件夹。我需要迭代它。压缩不是一个好主意,因为文件夹大小约为1千兆。不想每天通过电线传输1个演出。
非常感谢这方面的任何帮助。
感谢。
----------- -------- UPDATE
gci仅适用于本地系统上的文件(我可能在这里错了)。我指的是遍历ftp文件夹和文件。
这是我如何通过本地gci: $ GciFiles = gci C:\ ParentFolder \ SubFolder \ -recurse |其中{$ _。attributes -ne“Directory”}
foreach($ GciFiles文件) {}
现在这是花花公子,因为foreach可以给我文件夹名称和文件名。但是我想用FTP代码做同样的事情:
$ ftphost =“ftplocation \ Parentfolder \” 凭证在这里 制作一个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这里给出了文件的名称 #function下载文件 }
现在这一切都很好提供我知道我想要下载文件的文件夹。但是正如我之前所说,我只知道文件夹数量未知的父文件夹(它们的名称是由应用程序创建的GUID)和在每个GUID文件夹中都有一些文件。
现在,我认为GCI上的代码是什么?
我所做的是在相同的代码上,首先得到每个文件夹的名称,然后有另一个功能(除了现在我知道文件夹名称相同)和该功能while循环下载文件。但它不起作用。脚本继续执行。我是一个深水!不知道到底要做什么!
答案 0 :(得分:0)
tenpn有它。只需使用-Recurse选项Get-ChildItem
是的,似乎采用这条路线并不能真正为您提供所需的功能。我怀疑通过将服务器端的目录名称拉入字符串然后在客户端创建相同的目录,可以解决这个问题。
说实话,我觉得你可能会更好地使用像net-cmdlets
这样的东西我相信有一个业余爱好者的许可证,或者如果你通过工作这样做,那么完整版的价格将低于100美元。