使用Powershell脚本下载并命名文件

4

我有一个PowerShell脚本,会在特定时间从一个网站下载文件并保存到我们的网络上。这个脚本非常简单,但是我有一个需要修复的问题。首先,是这段代码:

$client = new-object system.Net.Webclient
$client.DownloadFile("http://app1.co.madison.il.us/circuitclerk/dockets/63/489641.TXT","\\risokcdatp001\automated_data\PeopleInfo\DataFile\Traffic\IL\Madison\July_ $(get-date -f yyyyMMdd.TXT)")
$client.DownloadFile("http://app1.co.madison.il.us/circuitclerk/dockets/63/599256.TXT","\\risokcdatp001\automated_data\PeopleInfo\DataFile\Traffic\IL\Madison\August_ $(get-date -f yyyyMMdd.TXT)")
$client.DownloadFile("http://app1.co.madison.il.us/circuitclerk/dockets/63/429855.TXT","\\risokcdatp001\automated_data\PeopleInfo\DataFile\Traffic\IL\Madison\September_ $(get-date -f yyyyMMdd.TXT)")

您可以看到它所连接的网站,然后它将文件存储在我们的网络上。问题是我需要根据网站上上传的日期和时间来命名这些文件。请参考以下HTML代码:

 <td width="65%" colspan="2">
      <div align="center"><font size="3"><a href="http://app1.co.madison.il.us/circuitclerk/dockets/63/489641.TXT" target="_blank"><b>MONTH OF JULY 2013</b></a></font></div>
    </td>
    <td>
      <div align="center"><font size="3"><b>July 05, 2013 (11:19 AM)</b></font></div>
    </td>

我该如何使用PowerShell获取值(2013年7月5日上午11:19)并将其用于我的文件名,例如:July-UpdatedYYYYMMDD.txt?谢谢!


你控制HTML源代码吗? - Eris
不,源代码受法院控制。 - cardinalsfan
1个回答

3
如果您必须在页面上显示精确的日期/时间,您需要改变解决方案。首先检查索引页面(第二个摘录来自哪里),然后使用它提取URL和时间戳,并像以前一样下载,但使用新文件名。
除非...您不能 轻松使用正则表达式解析任意HTML。现在,如果您知道这个HTML的形成方式相当静态,您可能可以逃脱。但是要准备好,如果法院即使稍微更改其页面,事情也会出问题。
如果您不需要那种精度级别,则可以使用与下载文件一起传输的HTTP响应标头。从中,您可以获取服务器报告的Last-Modified日期 - 文件在服务器上最后修改的日期/时间。这不一定是您在网页上看到的日期,而是他们将文件发布出去的时间(因此,如果从生产到发布有2小时的延迟,您可能会看到这种差异)。
R是我用于临时内容的RAM磁盘。根据需要修复您的路径。
$client = New-Object system.net.WebClient;
$client.DownloadFile("http://app1.co.madison.il.us/circuitclerk/dockets/63/489641.TXT","r:\tempfile.txt");
$updated = Get-Date $wc.ResponseHeaders["Last-Modified"] -Format "yyyyMMdd";
Rename-Item -Path "r:\tempfile.txt" -NewName "r:\July-Updated$updated.txt";

如果您使用的是PowerShell 3.0,您可以使用invoke-webrequest将文件获取到内存中,然后直接将其写入磁盘并赋予适当的名称。因为invoke-webrequest返回一个包含响应数据和头信息的对象,您可以按需处理它们。
另一个选择是联系法院,看看他们是否有另一种更适合机器的方法来访问数据。例如RSS或XML提要,或者其他针对您尝试做的事情的网关。

谢谢,这看起来很完美!我很想使用3.0版本,但我的工作并不太喜欢使用PS。我有很多繁琐的工作,正在尝试学习如何让计算机完成大部分工作。再次感谢,我明天会修复我的代码,并在运行时告诉您它的工作情况。 - cardinalsfan
“但是我的工作并不太喜欢使用PS。” - 这真的很遗憾,因为PowerShell是管理Windows Server和大多数其他微软软件的首选方式。它现在是Windows的标准部分,没有什么强烈的理由不使用它来代替旧技术。 - alroc
我应该说明一下,我是一名数据分析师,只是想让我的工作更轻松一些。他们不会给我任何IT资源来创建爬虫程序获取我想要的文件,因此我只需编写PowerShell脚本即可避免每个月手动下载它们。如果法院能够通过某种类型的数据源提供这些文件给我们,那我将非常乐意,但他们对此并没有太热衷。 - cardinalsfan
如果你的雇主积极阻止寻找更好、更高效的做事方式,那么是时候寻找新的雇主了。并且需要重申的是 - PS现在是Windows的标准部分,所以几乎不用担心人们使用它的问题。 - alroc
感谢 alroc - 我正在努力尝试解决问题。我正在提高我的技能并寻找其他选项。 - cardinalsfan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接