Estou tentando criar um arquivo em lote que instale favoritos em todos os PCs e notebooks da empresa.
É possível alterar o diretório no CMD usando shell:favorites
?
Preciso disso porque nos Notebooks os favoritos são armazenados localmente C:\%userprofile%\Favorites
e no Desktop o %userprofile%
em geral também fica no, C:\ drive
mas os favoritos são salvos no disco inicial. Não usamos letras H:\
para mapear a unidade, apenas um atalho de rede, é por isso que estou me esforçando tanto 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.
Responder1
Isso pode ser feito usando o PowerShell
cd ([Environment]::GetFolderPath("Favorites"))
Responder2
Scripts auxiliares
O processador de linha de comando suporta algunsvariáveis ambientaispara caminhos do sistema e do usuário, ou que possam ajudar a construí-los. 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 existe uma maneira nativa de obter caminhos específicos que não estão 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 um determinadopasta shell. Salve o código como ShellHelper.cmd
(ou como quiser, apenas mantenha a .cmd
extensão). Os scripts aceitam um único parâmetro, que é o identificador da pasta shell (por exemplo, Favorites
). O caminho será então armazenado na %shellFolder%
variável.
Exemplo de uso
ShellHelper.cmd Favorites >nul
if defined shellFolder pushd "%shellFolder%"
Observações
Ao contrário da versão Powershell, a versão VBScript funciona imediatamente no Windows 2000 e posterior. Quanto ao seu uso específico, qualquer versão servirá.
O PowerShell está integrado no Windows 7 e posterior, mas precisa ser instalado manualmente em sistemas operacionais anteriores.
Versão VBScript
O crédito principal vai para jeb e dbenham que criaram (e refinaram) 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))
Identificadores suportados
AllUsersDesktop
AllUsersStartMenu
AllUsersPrograms
AllUsersStartup
Desktop
Favorites
Fonts
MyDocuments
NetHood
PrintHood
Recent
SendTo
StartMenu
Startup
Templates
ObservaçãoPastas shell adicionais podem ser suportadas substituindo a última linha por:
WScript.Echo WScript.CreateObject("Shell.Application").Namespace(CLng(WScript.Arguments(0))).Self.Path
Neste caso, para obter um caminho de pasta shell específico, você precisa passar o valor numérico atribuído. Por exemplo, para obter o Favorites
caminho, o valor que você deve usar é 6
. Você pode encontrar todos os valores e seus significados no artigo vinculado abaixo.
Leitura adicional
- Referência de linha de comando
- É possível incorporar e executar VBScript em um arquivo em lote sem usar um arquivo temporário?
- Trabalhando com pastas especiais
- Enumeração ShellSpecialFolderConstants
Versão do 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
Identificações suportadas
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 e posterior
Além dos identificadores acima, estes 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çãoPara obter a lista dos disponíveis, você pode executar o seguinte comando em um console do PowerShell:
[Enum]::GetNames('System.Environment+SpecialFolder') | Sort-Object