2017-09-01 46 views
0

我第一次使用Powershell從客戶端的網頁下載前一天的文件。網頁來自數據記錄器,而不是來自供應商的skid。數據記錄器始終以yyMMdd##.CSV格式保存文件,其中##是該給定日(從00開始)的序列號文件。查看網頁時,我只看到特定日期的CSV文件的最大數量爲1(因此,8/31/17的文件將爲17083100.CSV)。我已經寫了Powershell代碼給我昨天的文件,假設00是當天唯一的文件,但我希望有一種方法可以使用通配符或for循環來下載任何可能存在的額外文件前一天。請參閱下面的代碼我目前有:Powershell下載給定日期的所有可能文件

$a = "http://10.109.120.101/logs/Log1/" 
$b = (get-date).AddDays(-1).ToString("yyMMdd") + "00.CSV" 
$c = "C:\" 
$url = "$a$b" 
$WebClient = New-Object net.webclient 
$path = "$c$b" 
$WebClient.DownloadFile($url, $path) 

回答

0
$a = "http://10.109.120.101/logs/Log1/" 
$c = "C:\" 

# From 0 to 99 loop. 
# In this loop, `$_` contains 0,1,2,... 
0..99 | ForEach-Object { 
    # `-f` is a format operator. 
    # For more information, see the following url: 
    # <https://social.technet.microsoft.com/wiki/contents/articles/7855.powershell-using-the-f-format-operator.aspx> 
    $b = "{0:yyMMdd}{1:d2}.CSV" -f (get-date).AddDays(-1), $_ 
    $url = "$a$b" 

    # check exist by using HTTP HEAD method 
    $req = [System.Net.WebRequest]::Create($url) 
    $req.Method = 'HEAD' 
    $req.Timeout = 10000 
    try { 
     $res = $req.GetResponse() 
    } catch [System.Net.WebException] { 
     $res = $_.Exception.Response 
    } 

    if ($res.StatusCode -eq 'OK') { 
     # exist -> download 
     $WebClient = New-Object System.Net.WebClient 
     $path = "$c$b" 
     $WebClient.DownloadFile($url, $path) 
     # 1sec interval 
     Start-Sleep 1 
    } else { 
     # not exist -> exit loop 
     Write-Host $_ 
     Write-Host $res.StatusCode 
     break 
    } 
} 
0

嘗試這樣:

$Date=(get-date).AddDays(-1).ToString("yyMMdd") 
$URLFormat ='http://10.109.120.101/logs/Log1/{0}{1:D2}.CSV' 

$WebClient = New-Object net.webclient 

#build destination path 
$PathDest="C:\Temp\$Date" 
New-Item -Path $PathDest -ItemType Directory -ErrorAction SilentlyContinue 

1..99 | %{ 

$Path="$PathDest\{0:D2}.CSV" -f $_ 
$URL=$URLFormat -f $Date, $_ 

try 
{ 
    Write-Host ("Try to download '{0}' file to '{1}'" -f $URL, $Path) 
    $WebClient.DownloadFile($Path, $URL) 
} 
catch 
{ 

} 

} 

$WebClient.Dispose() 
相關問題