您可以使用.NET's Environment.SpecialFolder。此 PowerShell 命令将为您提供启动文件夹的路径
[Environment]::GetFolderPath([Environment+SpecialFolder]::Startup)
如果你真的想使用cmd那么你可以像这样调用上面的命令
powershell -C [Environment]::GetFolderPath([Environment+SpecialFolder]::Startup)
并使用使用for /f像平常一样将其保存到变量中
或者使用混合批处理/VBS 解决方案
<!-- : Begin batch script
@echo off
cscript //nologo "%~f0?.wsf" %1
exit /b
----- Begin wsf script --->
<job><script language="VBScript">
Set oShell = CreateObject("Wscript.Shell")
Set oSFolders = oShell.SpecialFolders
WScript.Echo oSFolders("Startup")
</script></job>
或混合 Batch/Js
@if (@CodeSection == @Batch) @then
@echo off
cscript //e:jscript //nologo "%~f0" %*
exit /b
@end
// JScript Section
WScript.Echo((new ActiveXObject("shell.application")).namespace(0x07).Self.Path);
0x07 这里是Shell 特殊文件夹常量用于启动
只需将上述 2 个片段保存为 *.bat 文件并运行即可。或者剥离批处理部分,使其成为纯VBS/Js解决方案。
事实上,这些代码片段使用 COM 对象,因此可以用任何支持 COM 对象的语言编写它们,例如在 PowerShell 中:
(New-Object –ComObject Shell.Application).namespace(0x07).Self.Path
or
$c = New-Object -ComObject Wscript.Shell
$c.SpecialFolders("Startup")
可以使用纯批处理来获取路径,而无需借助 PowerShell、VBS 或 Js,但要棘手得多
注册表中有 2 个键包含特殊文件夹的路径:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
and HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
。这是解析它们的方法这个答案:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "StartupFolder="
for /F "skip=1 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Startup 2^>nul') do if /I "%%I" == "Startup" if not "%%~K" == "" if "%%J" == "REG_SZ" (set "StartupFolder=%%~K") else if "%%J" == "REG_EXPAND_SZ" call set "StartupFolder=%%~K"
if not defined StartupFolder for /F "skip=1 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Startup 2^>nul') do if /I "%%I" == "Startup" if not "%%~K" == "" if "%%J" == "REG_SZ" (set "StartupFolder=%%~K") else if "%%J" == "REG_EXPAND_SZ" call set "StartupFolder=%%~K"
if not defined StartupFolder set "StartupFolder=\"
if "%StartupFolder:~-1%" == "\" set "StartupFolder=%StartupFolder:~0,-1%"
if not defined StartupFolder set "StartupFolder=%UserProfile%\Startup"
echo Startup folder is: "%StartupFolder%"
endlocal