Powershell脚本下载和命名文件

时间:2013-07-22 15:33:07

标签: powershell powershell-v2.0

所以我有一个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>

如何让powersheel获得该值(2013年7月5日(上午11:19))并在我的文件名中使用它,如下所示:July-UpdatedYYYYMMDD.txt?谢谢!

1 个答案:

答案 0 :(得分:3)

如果您必须在页面上显示确切的日期/时间,则需要转动解决方案。首先检查索引页面(您的第二个摘录来自哪里),然后使用它来提取URL和时间戳,并按照您正在进行的操作下载但使用新文件名。

除了......你不能easily parse arbitrary HTML with regular expressions。现在,如果你知道这个HTML在它的形成方式上是非常静态的,那么你可以侥幸逃脱它。但是,如果法院改变他们的页面,即使是最微小的一点,也要做好准备。

如果您不需要该级别的精度,则可以在下载时使用文件随附的HTTP响应标头。从这里,您可以获得服务器报告的Last-Modified日期 - 文件在服务器上修改的最后日期/时间。这不一定是您在网页上看到的日期,而是当他们将文件放在那里时(因此,如果从制作到发布有2小时的延迟,您可能会看到差异)。

R是我用于临时工的RAMdisk。根据需要修复路径。

$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提要,或其他类型的网关,适用于您尝试执行的操作。