Ich versuche eine Batchdatei zu erstellen, die Favoriten auf allen Firmen-PCs und Notebooks installiert.
Ist es möglich, das Verzeichnis in CMD mit zu ändern shell:favorites
?
Ich brauche das, weil auf den Notebooks die Favoriten lokal gespeichert sind C:\%userprofile%\Favorites
und auf dem Desktop %userprofile%
ist das im Allgemeinen auch so, C:\ drive
aber die Favoriten werden auf dem Home-Laufwerk gespeichert. Wir verwenden keine Buchstaben, um H:\
das Laufwerk zuzuordnen, sondern nur eine Netzwerkverknüpfung, deshalb versuche ich so sehr, das zum Laufen zu bringen.
Wir haben unterschiedliche Server in unterschiedlichen Ländern, deshalb möchte ich mein Batch-Skript nicht für jedes Land mit dem entsprechenden Netzwerkpfad zum lokalen Server anpassen.
Antwort1
Dies kann mit Powershell durchgeführt werden
cd ([Environment]::GetFolderPath("Favorites"))
Antwort2
Hilfsskripte
Der Kommandozeilenprozessor unterstützt einigeUmgebungsvariablenfür System- und Benutzerpfade oder die auf andere Weise beim Erstellen dieser Pfade helfen können. Dies sind:
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
Sie können tippen, set | more
um die vollständige Liste zusammen mit den zugewiesenen Werten anzuzeigen. Es gibt jedoch keine native Möglichkeit, bestimmte Pfade abzurufen, die nicht aufgeführt sind, es sei denn, Sie können eine oder mehrere Variablen kombinieren und den tatsächlichen Pfad manuell erstellen.
Nachfolgend finden Sie einige hybride Batch-Skripte, die den Pfad zu einem bestimmtenShell-Ordner. Speichern Sie den Code unter ShellHelper.cmd
(oder wie auch immer Sie möchten, behalten Sie nur die .cmd
Erweiterung bei). Das Skript akzeptiert einen einzigen Parameter, nämlich die Shell-Ordnerkennung (z. B. Favorites
). Der Pfad wird dann in der %shellFolder%
Variablen gespeichert.
Beispielverwendung
ShellHelper.cmd Favorites >nul
if defined shellFolder pushd "%shellFolder%"
Bemerkungen
Im Gegensatz zur Powershell-Version funktioniert die VBScript-Version unter Windows 2000 und höher sofort. Für Ihren speziellen Einsatzzweck ist jede Version geeignet.
PowerShell ist in Windows 7 und höher integriert, muss in früheren Betriebssystemen jedoch manuell installiert werden.
VBScript-Version
Der größte Verdienst gebührt Jeb und Dbenham, die die hier verwendete Hybridtechnik entwickelt (und verfeinert) haben.
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))
Unterstützte Bezeichner
AllUsersDesktop
AllUsersStartMenu
AllUsersPrograms
AllUsersStartup
Desktop
Favorites
Fonts
MyDocuments
NetHood
PrintHood
Recent
SendTo
StartMenu
Startup
Templates
NotizZusätzliche Shell-Ordner können unterstützt werden, indem die letzte Zeile durch Folgendes ersetzt wird:
WScript.Echo WScript.CreateObject("Shell.Application").Namespace(CLng(WScript.Arguments(0))).Self.Path
In diesem Fall müssen Sie, um einen bestimmten Shell-Ordnerpfad abzurufen, den ihm zugewiesenen numerischen Wert übergeben. Um beispielsweise den Favorites
Pfad abzurufen, müssen Sie den Wert verwenden 6
. Alle Werte und ihre Bedeutung finden Sie im unten verlinkten Artikel.
Weiterführende Literatur
- Befehlszeilenreferenz
- Ist es möglich, VBScript in eine Batchdatei einzubetten und auszuführen, ohne eine temporäre Datei zu verwenden?
- Arbeiten mit speziellen Ordnern
- ShellSpecialFolderConstants-Aufzählung
PowerShell-Version
@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
Unterstützte Kennungen
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 und höher
Zusätzlich zu den oben genannten Kennungen sind auch diese verfügbar:
AdminTools
CDBurning
CommonAdminTools
CommonDesktopDirectory
CommonDocuments
CommonMusic
CommonOemLinks
CommonPictures
CommonProgramFilesX86
CommonPrograms
CommonStartMenu
CommonStartup
CommonTemplates
CommonVideos
Fonts
LocalizedResources
MyVideos
NetworkShortcuts
PrinterShortcuts
ProgramFilesX86
Resources
SystemX86
UserProfile
Windows
NotizUm die Liste der verfügbaren zu erhalten, können Sie den folgenden Befehl in einer PowerShell-Konsole ausführen:
[Enum]::GetNames('System.Environment+SpecialFolder') | Sort-Object