我正在尝试创建一个批处理文件,在所有公司电脑和笔记本电脑上安装收藏夹。
是否可以使用 CMD 中更改目录shell:favorites
?
我需要这个,因为在笔记本上,收藏夹存储在本地C:\%userprofile%\Favorites
,而在桌面上,收藏夹%userprofile%
通常也存储在本地,C:\ drive
但收藏夹保存在主驱动器上。我们不使用字母来H:\
映射驱动器,只使用网络快捷方式,这就是我努力让它工作的原因。
我们在不同国家有不同的服务器,因此我不想针对每个国家/地区调整我的批处理脚本以适应本地服务器的网络路径。
答案1
可以使用 powershell 完成
cd ([Environment]::GetFolderPath("Favorites"))
答案2
帮助脚本
命令行处理器支持一些环境变量用于系统和用户路径,或者可以通过其他方式帮助构建它们。它们是:
ALLUSERSPROFILE
APPDATA
CommonProgramFiles
CommonProgramFiles(x86)
CommonProgramW6432
COMPUTERNAME
HOMEDRIVE
HOMEPATH
LOCALAPPDATA
LOGONSERVER
ProgramData
ProgramFiles
ProgramFiles(x86)
ProgramW6432
PUBLIC
SystemDrive
SystemRoot
TEMP
TMP
USERDOMAIN
USERDOMAIN_ROAMINGPROFILE
USERNAME
USERPROFILE
windir
您可以键入set | more
以查看完整列表以及分配的值。但是,没有本机方法可以获取未列出的特定路径,除非您可以组合一个或多个变量并手动构建实际路径。
下面你可以找到几个混合批处理脚本,它们可以检索与特定shell 文件夹。将代码另存为ShellHelper.cmd
(或任何你喜欢的格式,只需保留.cmd
扩展名)。脚本接受一个参数,即 shell 文件夹标识符(例如Favorites
)。然后路径将存储在%shellFolder%
变量中。
示例用法
ShellHelper.cmd Favorites >nul
if defined shellFolder pushd "%shellFolder%"
评论
与 Powershell 版本不同,VBScript 版本在 Windows 2000 及更高版本中开箱即用。至于您的具体用途,两个版本都可以。
PowerShell 内置于 Windows 7 及更高版本,但在早期操作系统中必须手动安装。
VBScript 版本
主要功劳应归功于 jeb 和 dbenham,他们提出(并改进)了此处使用的混合技术。
REM^ &@echo off
REM^ &set shellFolder=
REM^ &if "%~1" == "" exit /b 2
REM^ &for /f "delims=" %%G in ('"cscript /nologo /e:vbscript "%~f0" %~1 "') do set shellFolder=%%~G
REM^ &exit /b
WScript.Echo WScript.CreateObject("WScript.Shell").SpecialFolders.Item(WScript.Arguments(0))
支持的标识符
AllUsersDesktop
AllUsersStartMenu
AllUsersPrograms
AllUsersStartup
Desktop
Favorites
Fonts
MyDocuments
NetHood
PrintHood
Recent
SendTo
StartMenu
Startup
Templates
笔记通过将最后一行替换为以下内容可以支持其他 shell 文件夹:
WScript.Echo WScript.CreateObject("Shell.Application").Namespace(CLng(WScript.Arguments(0))).Self.Path
在这种情况下,要获取特定的 shell 文件夹路径,您需要传递其指定的数值。例如,要获取路径,Favorites
您必须使用的值是6
。您可以在下面的链接文章中找到所有值及其含义。
进一步阅读
PowerShell 版本
@echo off
set shellFolder=
if "%~1" == "" exit /b 2
set _params=-NoLogo -NoProfile -Noninteractive -ExecutionPolicy Bypass
set _command="([Environment]::GetFolderPath('%~1'))"
for /f "usebackq delims=" %%G in (`powershell %_params% -Command %_command%`) do set shellFolder=%%~G
set _params=
set _command=
exit /b
支持的身份
ApplicationData
CommonApplicationData
CommonProgramFiles
Cookies
Desktop
DesktopDirectory
Favorites
History
InternetCache
LocalApplicationData
MyComputer
MyDocuments
MyMusic
MyPictures
Personal
ProgramFiles
Programs
Recent
SendTo
StartMenu
Startup
System
Templates
PowerShell 3.0 / .NET Framework 4.0 及更高版本
除了上述标识符之外,还有以下标识符可用:
AdminTools
CDBurning
CommonAdminTools
CommonDesktopDirectory
CommonDocuments
CommonMusic
CommonOemLinks
CommonPictures
CommonProgramFilesX86
CommonPrograms
CommonStartMenu
CommonStartup
CommonTemplates
CommonVideos
Fonts
LocalizedResources
MyVideos
NetworkShortcuts
PrinterShortcuts
ProgramFilesX86
Resources
SystemX86
UserProfile
Windows
笔记要获取可用列表,您可以在 PowerShell 控制台中运行以下命令:
[Enum]::GetNames('System.Environment+SpecialFolder') | Sort-Object