Isso pode ser feito usando o powershell
cd ([Environment]::GetFolderPath("Favorites"))
Estou tentando criar um arquivo de lote que instale favoritos em todos os PCs e notebooks da empresa.
É possível alterar o diretório no CMD usando shell:favorites
?
Eu preciso disso porque nos Notebooks os favoritos são armazenados localmente em C:\%userprofile%\Favorites
e na área de trabalho o %userprofile%
em geral também está no C:\ drive
, mas os favoritos são salvos no disco inicial. Nós não usamos letras como H:\
para mapear a unidade, apenas um atalho de rede, é por isso que estou me esforçando para fazer isso funcionar.
Temos servidores diferentes em países diferentes, portanto, não quero ajustar meu script em lote para cada país com o caminho de rede correspondente para o servidor local.
Isso pode ser feito usando o powershell
cd ([Environment]::GetFolderPath("Favorites"))
O processador de linha de comando suporta algumas variáveis de ambiente para caminhos de sistema e de usuário, ou que podem ajudar a construí-las . Eles são:
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
Você pode digitar set | more
para ver a lista completa junto com os valores atribuídos. No entanto, não há nenhuma maneira nativa de obter caminhos específicos que não estejam listados, a menos que você possa combinar uma ou mais variáveis e construir o caminho real manualmente.
Abaixo, você pode encontrar alguns scripts em lote híbridos que podem recuperar o caminho associado a uma pasta do shell específica. Salve o código como ShellHelper.cmd
(ou o que você quiser, apenas mantenha a extensão .cmd
). Os scripts aceitam um único parâmetro, que é o identificador da pasta do shell (por exemplo, Favorites
). O caminho será então armazenado na variável %shellFolder%
.
ShellHelper.cmd Favorites >nul
if defined shellFolder pushd "%shellFolder%"
Diferentemente da versão Powershell, o VBScript funciona imediatamente no Windows 2000 e posterior. Quanto ao seu uso específico, qualquer das versões fará.
O PowerShell está incorporado no Windows 7 e posterior, mas precisa ser instalado manualmente em sistemas operacionais anteriores.
O principal crédito vai para jeb e dbenham que inventam (e refinam) a técnica híbrida usada aqui.
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
Observação Pastas de shell adicionais podem ser suportadas substituindo a última linha por:
WScript.Echo WScript.CreateObject("Shell.Application").Namespace(CLng(WScript.Arguments(0))).Self.Path
Nesse caso, para obter um determinado caminho da pasta do shell, você precisa passar seu valor numérico atribuído. Por exemplo, para obter o caminho Favorites
, o valor que você precisa usar é 6
. Você pode encontrar todos os valores e seus significados no artigo vinculado abaixo.
@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
Além dos identificadores acima, eles também estão disponíveis:
AdminTools
CDBurning
CommonAdminTools
CommonDesktopDirectory
CommonDocuments
CommonMusic
CommonOemLinks
CommonPictures
CommonProgramFilesX86
CommonPrograms
CommonStartMenu
CommonStartup
CommonTemplates
CommonVideos
Fonts
LocalizedResources
MyVideos
NetworkShortcuts
PrinterShortcuts
ProgramFilesX86
Resources
SystemX86
UserProfile
Windows
Observação Para obter a lista das disponíveis, você pode executar o seguinte comando em um console do PowerShell:
[Enum]::GetNames('System.Environment+SpecialFolder') | Sort-Object
Tags command-line batch shell cmd.exe