Вспомогательные скрипты
Процессор командной строки поддерживает некоторые переменные среды для системных и пользовательских путей или может помочь в их создании. Они есть:
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
чтобы увидеть полный список вместе с назначенными значениями. Однако нет собственного способа получить конкретные пути, которых нет в списке, если только вы не можете объединить одну или несколько переменных и построить фактический путь вручную.
Ниже вы можете найти несколько гибридных пакетных сценариев, которые могут извлечь путь, связанный с определенной папкой оболочки. Сохраните любой код как ShellHelper.cmd
(или как хотите, просто сохраните расширение .cmd
). Скрипты принимают один параметр, который является идентификатором папки оболочки (например, Favorites
). Путь будет сохранен в переменной %shellFolder%
.
Пример использования
ShellHelper.cmd Favorites >nul
if defined shellFolder pushd "%shellFolder%"
замечания
В отличие от версии Powershell, VBScript один работает из коробки в Windows 2000 и более поздних версиях. Что касается вашего конкретного использования, подойдет любая версия.
PowerShell встроен в Windows 7 и более поздние версии, но его необходимо устанавливать вручную в более ранних операционных системах.
Версия VBScript
Основная заслуга джеба и дбенхэма, которые придумали (и усовершенствовали) гибридную технику, использованную здесь.
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
Примечание. Дополнительные папки оболочки могут поддерживаться путем замены последней строки на:
WScript.Echo WScript.CreateObject("Shell.Application").Namespace(CLng(WScript.Arguments(0))).Self.Path
В этом случае, чтобы получить конкретный путь к папке оболочки, вам нужно передать присвоенное ему числовое значение. Например, чтобы получить путь к 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
дальнейшее чтение