Estoy intentando crear un archivo por lotes que instale favoritos en todas las PC y portátiles de la empresa.
¿Es posible cambiar el directorio en CMD usando shell:favorites
?
Necesito esto porque en las computadoras portátiles los favoritos se almacenan localmente C:\%userprofile%\Favorites
y en el escritorio, %userprofile%
en general, también C:\ drive
se guardan en el disco de inicio. No usamos letras H:\
para mapear la unidad, solo un acceso directo a la red, es por eso que me esfuerzo tanto para que esto funcione.
Tenemos diferentes servidores en diferentes países, por lo tanto, no quiero ajustar mi script por lotes para cada país con la ruta de red correspondiente al servidor local.
Respuesta1
Se puede hacer usando powershell
cd ([Environment]::GetFolderPath("Favorites"))
Respuesta2
Guiones de ayuda
El procesador de línea de comandos admite algunosVariables de entornopara rutas de sistema y de usuario, o que de otro modo puedan ayudar a construirlas. Ellos son:
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
Puede escribir set | more
para ver la lista completa junto con los valores asignados. Sin embargo, no existe una forma nativa de obtener rutas particulares que no aparecen en la lista, a menos que pueda combinar una o más variables y crear la ruta real manualmente.
A continuación puede encontrar un par de scripts por lotes híbridos que pueden recuperar la ruta asociada a un archivo específicocarpeta de shell. Guarde cualquiera de los códigos como ShellHelper.cmd
(o como quiera, solo conserve la .cmd
extensión). Los scripts aceptan un único parámetro, que es el identificador de la carpeta del shell (por ejemplo Favorites
). Luego, la ruta se almacenará en la %shellFolder%
variable.
Uso de ejemplo
ShellHelper.cmd Favorites >nul
if defined shellFolder pushd "%shellFolder%"
Observaciones
A diferencia de la versión Powershell, la versión VBScript funciona de inmediato en Windows 2000 y versiones posteriores. En cuanto a su uso específico, cualquiera de las versiones servirá.
PowerShell está integrado en Windows 7 y versiones posteriores, pero debe instalarse manualmente en sistemas operativos anteriores.
Versión VBScript
El crédito principal es para jeb y dbenham, quienes idearon (y refinaron) la técnica híbrida utilizada aquí.
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 admitidos
AllUsersDesktop
AllUsersStartMenu
AllUsersPrograms
AllUsersStartup
Desktop
Favorites
Fonts
MyDocuments
NetHood
PrintHood
Recent
SendTo
StartMenu
Startup
Templates
NotaSe pueden admitir carpetas de shell adicionales reemplazando la última línea con:
WScript.Echo WScript.CreateObject("Shell.Application").Namespace(CLng(WScript.Arguments(0))).Self.Path
En este caso, para obtener una ruta de carpeta de shell particular, debe pasar su valor numérico asignado. Por ejemplo, para obtener la Favorites
ruta el valor que debes usar es 6
. Puede encontrar todos los valores y su significado en el artículo vinculado a continuación.
Otras lecturas
- Referencia de línea de comandos
- ¿Es posible incrustar y ejecutar VBScript dentro de un archivo por lotes sin utilizar un archivo temporal?
- Trabajar con carpetas especiales
- Enumeración ShellSpecialFolderConstants
Versión 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
Identificaciones admitidas
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 y posteriores
Además de los identificadores anteriores, también están disponibles:
AdminTools
CDBurning
CommonAdminTools
CommonDesktopDirectory
CommonDocuments
CommonMusic
CommonOemLinks
CommonPictures
CommonProgramFilesX86
CommonPrograms
CommonStartMenu
CommonStartup
CommonTemplates
CommonVideos
Fonts
LocalizedResources
MyVideos
NetworkShortcuts
PrinterShortcuts
ProgramFilesX86
Resources
SystemX86
UserProfile
Windows
NotaPara obtener la lista de los disponibles, puede ejecutar el siguiente comando en una consola de PowerShell:
[Enum]::GetNames('System.Environment+SpecialFolder') | Sort-Object