bat 文件或 vbs 文件是否可以接受参数(exe 文件的路径),然后创建该文件的快捷方式并将其放置在启动文件夹中,或者添加注册表项以在 Windows 启动时运行该 exe
但我希望相同的脚本也能够删除启动项(在所有操作系统版本上)。
所以我假设脚本需要发送两个参数/参数:1 - 启动时运行的文件/exe 2 - 是否在启动时添加或删除条目
这可能吗?
答案1
首先,我建议您仔细检查任何比 Vista 更旧的操作系统在注册表中的运行键位置,因为我已经很长时间没有使用它们了,所以可能存在我不记得的差异。
如果我正确理解了您的问题,这个批处理脚本应该可以满足您的要求。它为您提供了一个简单的菜单,供您选择从运行键(启动)中添加或删除程序,然后让您输入程序名称和可执行文件的路径。
:begin
cls
@echo off
echo Program startup Utility
echo.
echo 1. Add Program to Startup
echo 2. Remove Program From Startup
echo x. Exit
set /p choice= Choose A Service:
if not '%choice%'== set %choice%=choice:~0,1%
if '%choice%'=='1' goto :addstartup
if '%choice%'=='2' goto :delstartup
if '%choice%'=='x' goto :exit
:addstartup
cls
echo/
echo/
echo Add Program to Startup
echo or type back to go to main menu
echo/
set /p keyname= Please State Program Name:
if '%keyname%'=='back' goto :begin
set /p expath= Please Enter Path to Executible:
if '%expath%'=='back' goto :begin
reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ /v %keyname% /t REG_SZ /d "%expath%"
timeout /t 3 >nul
goto begin
:delstartup
cls
echo/
echo Remove Program From Startup
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ /s
echo/
set /p keyname= Please Enter Program Name:
reg delete HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ /v "%keyname%" /f
timeout /t 3 >nul
goto begin
或者,如果您只需要添加或删除同一个程序,而不需要输入多个程序名称或 exe 路径,那么您可以像这样修改脚本,将 %keyname% 替换为您的程序名称,将 %expath% 替换为您的可执行文件的路径(不带 %'s),然后保存。确保您的键名在添加和删除时都相同。
如果您只想在选定操作后退出脚本,您也可以将“goto begin”行与“exit”交换。
:begin
cls
@echo off
echo Program startup Utility
echo.
echo 1. Add Program to Startup
echo 2. Remove Program From Startup
echo x. Exit
set /p choice= Choose A Service:
if not '%choice%'== set %choice%=choice:~0,1%
if '%choice%'=='1' goto :addstartup
if '%choice%'=='2' goto :delstartup
if '%choice%'=='x' goto :exit
:addstartup
cls
reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ /v %keyname% /t REG_SZ /d "%expath%"
timeout /t 2 >nul
goto begin
:delstartup
cls
reg delete HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ /v "%keyname%" /f
timeout /t 2 >nul
goto begin