Windows自动获取壁纸
原文链接: Windows自动获取壁纸
1. 聚焦壁纸获取
脚本编写
聚焦所用图片的文件存储是无后缀的,将小于100KB的过滤,大于100KB的拷贝到F:\Picture\Wallpaper\Spotlight\CopyAssets\
并添加jpg后缀
foreach($file in (Get-Item "$($env:LOCALAPPDATA)\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\*"))
{
if ((Get-Item $file).length -lt 100kb) { continue }
Copy-Item $file.FullName "F:\Picture\Wallpaper\Spotlight\CopyAssets\$($file.Name).jpg";
}
将添加后缀的文件根据宽度进行分类,其中宽1920的文件拷贝一份到F:\Picture\Wallpaper\Favorites
,该路径存放为动态播放壁纸的文件夹,然后再移动到F:\Picture\Wallpaper\Spotlight\Horizontal
备份,宽1080的文件移动到F:\Picture\Wallpaper\Spotlight\Vertical
备份
foreach($newfile in (Get-Item "F:\Picture\Wallpaper\Spotlight\CopyAssets\*"))
{
$image = New-Object -comObject WIA.ImageFile;
$image.LoadFile($newfile.FullName);
if($image.Width.ToString() -eq "1920"){Copy-Item $newfile.FullName "F:\Picture\Wallpaper\Favorites" -Force;
Move-Item $newfile.FullName "F:\Picture\Wallpaper\Spotlight\Horizontal" -Force;
}
elseif($image.Width.ToString() -eq "1080"){ Move-Item $newfile.FullName "F:\Picture\Wallpaper\Spotlight\Vertical" -Force; }
}
Remove-Item "F:\Picture\Wallpaper\Spotlight\CopyAssets\*";
将上述内容一并保存后缀为.ps1
的powershell脚本
powershell权限修改
由于windows10默认的任务计划没有权限执行ps1脚本,因此首先需要用管理员运行Windows PowerShell,然后输入
Set-ExecutionPolicy Unrestricted
进行权限更改,输入Y确认
本次修改后,不用再次修改powershell执行权限
计划任务创建
- 配置位置:控制面板 -> 系统和安全性-> 管理工具-> 任务计划程序
- 常规:
- 名称:例如GetWallPaper
- 描述:可选
- 安全选项:
- 更改用户或组:输入system,这样运行的任务会后台运行,不会有弹窗
- 勾选使用最高权限运行
- 配置:这里选择Windows 10
- 名称:例如GetWallPaper
- 触发器:
- 新建一个触发器,例如每隔一天或者每隔几小时
- 新建一个触发器,例如每隔一天或者每隔几小时
- 操作:
- 操作:启动程序
- 程序或者脚本:powershell
- 可选参数:powershell脚本的绝对路径,例如
D:\Users\xxxx\Documents\PowerShell\wallpaper_get.ps1
- 操作:启动程序
这样Windows就可以自动获取聚焦的图片
2. 必应壁纸获取
脚本编写
function Save-BingTodayImage()
{
#必应图片故事API
$bingImageApi ='http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=zh-cn'
$bingUri = 'http://www.bing.com/'
# 获取图片链接
[xml]$bingImageXml = (Invoke-WebRequest -Uri $bingImageApi).Content
Write-Host "Story: $( $bingImageXml.images.image.copyright ) "
$imgLink = '{0}{1}' -f $bingUri , $bingImageXml.images.image.url
# 下载和保存图片
$imageDir = "F:\Picture\Wallpaper\Bing\"
if( -not (Test-Path $imageDir) )
{
mkdir $imageDir | Out-Null
}
$imageFile = Join-Path $imageDir ( '{0}.jpg' -f $bingImageXml.images.image.fullstartdate)
Invoke-WebRequest -Uri $imgLink -OutFile $imageFile
Copy-Item $imageFile "F:\Picture\Wallpaper\Favorites" -Force;
$imageStoryDir = "F:\Picture\Wallpaper\Bing\Story"
if( -not (Test-Path $imageStoryDir) )
{
mkdir $imageStoryDir | Out-Null
}
$date = $(Get-Date).ToString('yyyy-MM-dd');
echo "Story of $date $( $bingImageXml.images.image.copyright )" >> "$imageStoryDir\timeline.txt"
return $imageFile
}
# 获取今日必应背景图片
$image=Save-BingTodayImage
计划任务创建
类似聚焦壁纸获取->计划任务创建
3. 壁纸归档
壁纸常年累积,难免会堆积过多,为了能看到更多不同壁纸,可以按年月对壁纸进行归档
foreach($file in (Get-Item "F:\Picture\Wallpaper\Favorites\*"))
{
#获取每个文件的创建时间
if ((Get-Item $file).lastwritetime -lt $(Get-Date).ToString('yyyy-MM')) {
#获取时间中的年月,格式例如2017-01
$folder = $file.lastwritetime.ToString('yyyy-MM');
#获取时间中的年,格式例如2017
$year = $file.lastwritetime.ToString('yyyy');
#检测以该文件创建时间的年份命名的文件夹是否存在,例如2017,如果存在
if((Test-Path "F:\Picture\Wallpaper\History\$year")){
#检测该目录下,检测以该文件创建时间的年月命令的文件夹是否存在,例如2017-01,存在将文件移动到该文件夹下
if((Test-Path "F:\Picture\Wallpaper\History\$year\$folder")) {
Move-Item $file.FullName "F:\Picture\Wallpaper\History\$year\$folder" -Force;
}
#不存以该文件创建时间的年月命名的文件夹,先创建,再将文件移动到该文件夹下
else {
New-Item "F:\Picture\Wallpaper\History\$year\$folder" -ItemType directory -Force;
Move-Item $file.FullName "F:\Picture\Wallpaper\History\$year\$folder" -Force;
}
}
#如果不存在以该文件创建时间的年命名的文件夹
else {
#创建以该文件创建时间的年份命名的文件夹
New-Item "F:\Picture\Wallpaper\History\$year" -ItemType directory -Force;
#检测该目录下,检测以该文件创建时间的年月命令的文件夹是否存在,例如2017-01,存在将文件移动到该文件夹下
if((Test-Path "F:\Picture\Wallpaper\History\$year\$folder")) {
Move-Item $file.FullName "F:\Picture\Wallpaper\History\$year\$folder" -Force;
}
#不存以该文件创建时间的年月命名的文件夹,先创建,再将文件移动到该文件夹下
else {
New-Item "F:\Picture\Wallpaper\History\$year\$folder" -ItemType directory -Force;
Move-Item $file.FullName "F:\Picture\Wallpaper\History\$year\$folder" -Force;
}
}
}
}