如何使用PowerShell从URL批量下载未知文件名的日志文件
PowerShell批量下载指定格式的日志文件
如果目标URL对应的HTTP服务器支持目录索引(浏览器访问能看到文件列表),可以按以下步骤批量下载符合plus_yyMMddHHmmss.csv格式的日志文件:
1. 获取目录下的目标文件名列表
先用Invoke-WebRequest抓取目录页面内容,再通过正则匹配筛选出符合格式的文件名:
# 替换为你的目标日志目录URL $targetDirUrl = "http://your-server.com/log-folder/" # 获取目录页面内容 $pageContent = Invoke-WebRequest -Uri $targetDirUrl # 匹配符合格式的文件名:plus_后面跟12位数字(yymmddhhmmss),后缀.csv $targetFiles = $pageContent.Links | Where-Object { $_.href -match 'plus_\d{12}\.csv' } | Select-Object -ExpandProperty href
2. 批量下载文件
循环筛选出的文件名,拼接完整下载URL,保存到本地指定路径:
# 替换为你的本地保存路径 $localSavePath = "C:\LocalLogs\" # 确保保存目录存在 if (-not (Test-Path $localSavePath)) { New-Item -Path $localSavePath -ItemType Directory | Out-Null } # 逐个下载文件 foreach ($file in $targetFiles) { $fullDownloadUrl = $targetDirUrl.TrimEnd('/') + '/' + $file $localFilePath = Join-Path -Path $localSavePath -ChildPath $file try { # 用Invoke-WebRequest下载,或者换成Start-BitsTransfer(支持断点续传) Invoke-WebRequest -Uri $fullDownloadUrl -OutFile $localFilePath Write-Host "已下载: $file" } catch { Write-Host "下载失败 $file : $_" } }
注意事项
- 如果目标服务器不提供目录列表,你需要确认是否有API接口可以获取文件列表,或者改用FTP/SFTP协议(对应可使用
WinSCP模块或原生FTP命令)。 - 若要限定下载某一天的文件,可修改正则表达式,比如只下载22年9月19日的文件:
plus_220919\d{6}\.csv
内容的提问来源于stack exchange,提问作者mikeyb
相关产品推荐
相关产品推荐

