帮助脚本

帮助脚本

我正在尝试创建一个批处理文件,在所有公司电脑和笔记本电脑上安装收藏夹。

是否可以使用 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

进一步阅读

相关内容