Mein Problem: Ich muss bestimmte Symbole auf Benutzer-Desktops kopieren, die auf verschiedene Engrg-Ressourcen verweisen. Diese Symbole werden relativ regelmäßig aktualisiert. Meine ursprüngliche Batchdatei wurde einfach robocopy
zu diesem Zweck verwendet und funktionierte einwandfrei.
robocopy "[NetworkDrive]\folderX\Desktop" "%userprofile%\Desktop"
Zumindest war das bei den meisten Leuten so. Wenn wir Office365 und OneDrive einsetzen, synchronisieren die Leute ihren Desktop. In diesem Fall ist %userprofile%\desktop nicht der Speicherort des Desktops. Es ist etwas ganz anderes:
c:\users\username\one_drive_enterprise_name\Desktop
Also habe ich meinen Stapel folgendermaßen angepasst:
set KEY_NAME="HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
set VALUE_NAME="Desktop"
FOR /F "skip=2 tokens=2,*" %%A IN ('reg.exe query %KEY_NAME% /v %VALUE_NAME%') DO SET LUD=%%B
echo "%LUD%"
robocopy "[NetworkDrive]\folderX\Desktop" "%LUD%"
%LUD%
gibt den entsprechenden Schlüssel für den angegebenen Benutzer zurück.
Ich bekomme entweder %userprofile%\desktop
ODER"c:\users\username\one_drive_enterprise_name\Desktop."
Aber wenn ich es %LUD%
in Robocopy übergebe, wird es als wörtlicher Pfad verwendet und mit dem aktuellen Speicherort der Batchdatei als Präfix versehen.
c:\Benutzer\aktueller Benutzer\Desktop\Benutzerprofil\Desktop als Beispiel.
Am Ende habe ich einen neuen Ordner namens %userprofile% auf dem Desktop mit einem Unterordner namens Desktop. :)
Wie übergebe ich das Entsprechende, indem ich ein weiteres If>Then mit einfachen fest codierten Pfaden verwende?
Danke Kevin
Antwort1
Das Problem besteht darin, dass der Wert der LUD
Variablen %
Zeichen enthält, die auf eine andere Variable verweisen.
Vielleicht gibt es einen effizienteren Weg, aber Sie könnten so etwas tun:
echo set folder=%LUD% > "%TEMP%\setfolder.bat"
call "%TEMP%\setfolder.bat"
del "%TEMP%\setfolder.bat"
echo %folder%
Antwort2
So etwas sollte das Problem beheben, es ruft den Inhalt der Variablen innerhalb von %LUD% ab und nicht die Variable selbst:
für /f "delims=" %%a in ('echo %LUD%') setze LUD=%%a
@echo off
set KEY_NAME="HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
set VALUE_NAME="Desktop"
FOR /F "skip=2 tokens=2,*" %%A IN ('reg.exe query %KEY_NAME% /v %VALUE_NAME%') DO SET LUD=%%B
for /f "delims=" %%a in ('echo %LUD%') do set LUD=%%a
robocopy "[NetworkDrive]\folderX\Desktop" "%LUD%"
Antwort3
Nach Gesprächen mit einigen Kollegen habe ich zwei weitere Möglichkeiten ...
1 - verwenden Sie einfach den öffentlichen Desktop für alle und fertig. C:\users\public\desktop
2 - Verwenden Sie den Schlüssel „Shell-Ordner“ anstelle von „Benutzer-Shell-Ordner“. Warum? Weil der Schlüssel „Shell-Ordner“ nur die tatsächlichen Pfade enthält, keine Variablen. Mit anderen Worten, löschen Sie „Benutzer“ aus dem KEY_NAME.