如何用PowerShell每月自动下载含年月命名的网页文件?
PowerShell 每月自动下载带日期变量的文件
我需要一个PowerShell任务,每月从网站下载文件。该文件名包含月份和年份,因此URL中需要使用变量或表达式。我测试了以下固定文件名的代码并可正常运行,但文件名每月会变化:
Invoke-WebRequest https://download.cms.gov/nppes/NPPES_Data_Dissemination_April_2024.zip -OutFile C:\Data\NPPES_Data_Dissemination_April_2024.zip
我有一个可自动调整日期的表达式,但不确定能否在PowerShell中使用,该表达式如下:
"https://download.cms.gov/nppes/NPPES_Data_Dissemination_"+ (MONTH(getdate()) == 1 ? "Jan" : MONTH(getdate()) == 2 ? "Feb" : MONTH(getdate()) == 3 ? "Mar" : MONTH(getdate()) == 4 ? "April" : MONTH(getdate()) == 5 ? "May" : MONTH(getdate()) == 6 ? "Jun" : MONTH(getdate()) == 7 ? "Jul" : MONTH(getdate()) == 8 ? "Aug" : MONTH(getdate()) == 9 ? "Sep" : MONTH(getdate()) == 10 ? "Oct" : MONTH(getdate()) == 11 ? "Nov" : MONTH(getdate()) == 12? "Dec":"")) + "_"+ (DT_WSTR,4)DATEPART("YEAR",GETDATE()) + ".zip"
解决方案
PowerShell里可以直接用Get-Date的格式化功能,替代复杂的条件判断,实现更简洁可靠:
# 处理月份名称:四月用全称"April",其他月份用缩写 $currentDate = Get-Date $monthName = if ($currentDate.Month -eq 4) { "April" } else { $currentDate.ToString("MMM") } $year = $currentDate.Year # 拼接URL和输出文件路径 $url = "https://download.cms.gov/nppes/NPPES_Data_Dissemination_${monthName}_${year}.zip" $outFile = "C:\Data\NPPES_Data_Dissemination_${monthName}_${year}.zip" # 执行下载 Invoke-WebRequest -Uri $url -OutFile $outFile
特殊场景调整
如果需要每月下载上个月的文件(比如每月1号获取上月数据),只需修改日期获取逻辑:
$lastMonth = (Get-Date).AddMonths(-1) $monthName = if ($lastMonth.Month -eq 4) { "April" } else { $lastMonth.ToString("MMM") } $year = $lastMonth.Year $url = "https://download.cms.gov/nppes/NPPES_Data_Dissemination_${monthName}_${year}.zip" $outFile = "C:\Data\NPPES_Data_Dissemination_${monthName}_${year}.zip" Invoke-WebRequest -Uri $url -OutFile $outFile
定时执行设置
把脚本保存为.ps1文件后,通过Windows任务计划程序创建定时任务:
- 触发器设为每月指定日期(比如每月1号)
- 操作选择「启动程序」,程序/脚本填
powershell.exe,参数填-ExecutionPolicy Bypass -File "C:\你的脚本路径\文件名.ps1"
内容的提问来源于stack exchange,提问作者Don
相关产品推荐
相关产品推荐

