Posso usar os comandos shell: para alterar o diretório no CMD?

2

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.

    
por Martin 24.03.2014 / 10:08

2 respostas

1

Isso pode ser feito usando o powershell

cd ([Environment]::GetFolderPath("Favorites"))
    
por 24.03.2014 / 10:45
0

Scripts de ajuda

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% .

Exemplo de uso

ShellHelper.cmd Favorites >nul
if defined shellFolder pushd "%shellFolder%"

Observações

  • 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.

versão do VBScript

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))

Identificadores suportados

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.

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

Suportado identifica

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, 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

Leitura adicional

por 28.03.2014 / 11:43