Вспомогательные скрипты

Вспомогательные скрипты

Я пытаюсь создать пакетный файл, который установит избранное на все ПК и ноутбуки компании.

Можно ли сменить каталог в 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, чтобы увидеть полный список вместе с назначенными значениями. Однако нет собственного способа получить конкретные пути, которые не перечислены, если только вы не можете объединить одну или несколько переменных и построить фактический путь вручную.

Ниже вы можете найти несколько гибридных пакетных скриптов, которые могут извлечь путь, связанный с определеннымпапка оболочки. Сохраните любой код как 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

дальнейшее чтение

Связанный контент