Scripts auxiliares

Scripts auxiliares

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%\Favoritese no Desktop o %userprofile%em geral também fica no, C:\ drivemas 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 | morepara 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 .cmdextensã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 Favoritescaminho, o valor que você deve usar é 6. Você pode encontrar todos os valores e seus significados no artigo vinculado abaixo.

Leitura adicional


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

Leitura adicional

informação relacionada