Übergeben einer Systemvariablen innerhalb einer anderen Variablen

Übergeben einer Systemvariablen innerhalb einer anderen Variablen

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 robocopyzu 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%\desktopODER"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 LUDVariablen %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.

verwandte Informationen