记我的第一个实用bat编写&修改历程(windows聚焦壁纸提取)

这里我先贴出我自己编写的简单bat

@echo off
echo 正在指定位置新建文件夹,如果存在则会跳过...
cd E:\图库 || md E:\图库\windows聚焦

echo 防Copy重复操作!
cd E:\图库\windows聚焦\ && ren *.* *..

echo 这里设定有默认的原文件夹和目标文件夹
set dir1=%USERPROFILE%\AppData\Local\Packages\MICROS~1.CON\LOCALS~1\Assets\
set dir2=E:\图库\windows聚焦\

echo 请输入源文件夹路径:
set /p dir1=
echo dir1=%dir1%
echo 请输入目标文件夹路径:
set /p dir2=
echo dir2=%dir2%
pause

echo=
echo 正在进行移动...
copy /-Y %dir1%\* %dir2%\
echo=
echo 正在进行重命名...
cd E:\图库\windows聚焦\ && ren *.* *.jfif
echo=
echo 完成!

它的功能为简单复制windows聚焦自己缓存的壁纸数据至用户自定义位置并重命名后缀为.jfif

如图,用WinHex打开很明显得出此文件为.jfif格式。

目前这个简单的脚本完全可以正常运行,但仍有很多不足的地方。

代码中dir2的目标路径我个人想要它位于个人电脑的"图库"文件夹中新建一个文件夹。但是每个人的电脑都是不同的,不是所有人的系统图库位置都是一样的(很多人会自定义系统图库位置,比如我。。),但我仍然希望他在任何人电脑里边都会新建目标文件夹于系统图库内,这就产生了一个小问题。

我的思路是通过读取注册表中的My Pictures项的键值以获得不同人电脑的"图库路径",进而达成在目标位置新建目标文件夹的想法。

据我所知注册表中有两个项的键值都明确指向"图库",由于对注册表了解并不多并且好像并没什么大区别,因此我暂且随便选择一个键值读取。

@echo off
REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "My Pictures"
pause

此为读取注册表的代码

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
    My Pictures    REG_SZ    E:\图库

 此为读取结果。到这里问题好像解决了,but并没有。。

尽管我们读取到了想要的数据,but数据总不能手动输进去吧。。

大肆度娘之后得到一个结论:这个操作只能通过for和find命令一起才能实现,并且还不是很简明那种。。烦。。

 据互联网消息后操作之后得出结论,windows聚焦功能设置文件很有可能就是%USERPROFILE%\AppData\Local\Packages\MICROS~1.CON\LOCALS~1\Settings\文件夹中的dat文件和dat.log1 dat.log2三个文件(本来是只有一个dat文件,后来不知道啥时候就变三个了。。)

我们有同样用WinHex打开之后发现,三个文件都是regf文件(三个图没什么意义放一个就可以了)

 经过查阅万能的度娘之后得知这是种注册表文件,又叫HIVE文件,blabla...

说是可以通过regedit加载(然并卵,当然也可能是某些环境不对吧。。)

用WinHex我们发现三个文件中都有大量的词汇提到任务、更新、订阅之类,因此我们几乎可以断定就是这几个文件决定windows聚焦的更新频率?!

然,技术不够特来无奖悬赏。

 3·觉得目前的目标文件夹所得过于凌乱(如图)

 因此想要增加一个可选的小功能:文件分类存储(这里的类指图片的横竖),自然而然就想到读取文件属性从而进行判断分类BUT!BUT!但是!attrib命令只能显示和增减AH什么的(他甚至都不愿意把属性列出来)。。

然后就又开始度娘。。偶然看到一个大佬的分享(人一时半会忘了,待会贴链接出来),在此借用一下他的代码。

这段暂且命名为a.bat (PS:翻译是我加的,其他未作改动,格式得保存为ANSI,要不然中文会出乱码)

echo off
echo path name(路径名):
echo %1
echo fully qualified path name(windows的全路径):
echo %~f1
echo dirive(所在驱动盘):
echo %~d1
echo path(路径):
echo %~p1
echo name(文件名):
echo %~n1
echo extention(格式名):
echo %~x1
echo short name(短命称):
echo %~s1
echo attribute(属性):
echo %~a1
echo time(修改日期):
echo %~t1
echo size(文件大小):
echo %~z1
echo directory(文件所在目录):
echo %~dp1
pause

 它的使用方式为:于cmd中键入如下代码后回车。意思是用a.bat读取.jfif的属性并输出至.txt另存至E:\桌面

E:\桌面\a.bat "E:\桌面\90ad0a968dd91cd4ead22f03ad32e6ecfd3257bb3d3624d7e116f20ed499257f.jfif" >E:\桌面\属性报告.txt

 但我们仍未获得想要的属性信息(分辨率和大小之类的),也许是我方向搞错啦??

 但是我们仍然获得了一些有用的信息以及一些想不通并且不太好描述的东西。。

比如我们将一个文件拖动至a.bat时,它会正常运行并且取得相应的信息,但是这个操作用代码怎么表示。。总不能就手动吧。。

于是我就发挥了我的探(xia)索(gao)精神 ,编出了个奇奇怪怪的并不能运行的.bat。。

包括但不限于如下。。

echo %~s1 < E:\桌面\6eaffd5c253fc1390f628b0f76fd32d5e721e9ccada5ad767a8f95e3d30e33d8.jfif
echo %~s1 | E:\桌面\6eaffd5c253fc1390f628b0f76fd32d5e721e9ccada5ad767a8f95e3d30e33d8.jfif

echo %~s1 & E:\桌面\6eaffd5c253fc1390f628b0f76fd32d5e721e9ccada5ad767a8f95e3d30e33d8.jfif

¥&……&%%%……#¥(脏话)

(我知道call,但是我不想做一个bat然后跟着一堆附属bat...)

4·发现有的人Assets文件夹中缓存的是一堆图标仅有几个或者没有壁纸,因此想增加一个判断或者自选功能,用以删除图标并且刷新(打算直接删dat文件)windows聚焦,但且未实行,原因有几:

一.对目标的判定暂时受挫,按照大小和分辨率都不太好搞,并且目前个人水平难以以此进行判定,有待进一步学习提升技术。

二.时间实在不够充裕,考试临近事务繁忙。

 

此为按大小排列的混合文件(有一堆图标和几个壁纸,从他处借来的真实数据) 

此为中图标一览 

5·打算后期加上bat的开机自运行功能,可以的话甚至还想搞个分享的功能(比如自动将更新的壁纸数据通过QQ之类打包分享至指定账户之类的)

6·有时候bat还需要管理员权限运行,要不然可能会出事(血的教训)。。

@echo off
cd C:\Users\%username%\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\
echo %cd%
ren *.* *.jfif
pause

谨慎运行上述代码。。解释一下,没管理员权限的话此处的cd命令无效,然后就会把当前目录的所有文件重命名后缀为.jfif。。

@echo off
::强制获取管理员运行权限
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd C:\测试\
echo %cd%
pause

此为强制以管理员身份运行的代码(这个代码也是同站的一个大佬发的,待会我挂人家链接出来),有需要的bat前面加上就行了,but意思并没看懂,有明白的可以评论一下。。

差不多就先写到这了,又盯一天电脑,还没吃饭呢,头疼。。

Guess you like

Origin blog.csdn.net/BatGUI/article/details/121752816