lionheart
Goto Top

Umgebungsvariable appdata für andere Benutzer ausfindig machen

Guten Morgen!

Ich muss mit einem Windows Batch-Skript mehrere Dateien in das Verzeichnis %userprofil%\Anwendungsdaten\ kopieren. Grundsätzlich ist das für den aktuell angemeldeten Benutzer kein Problem, da ich einfach den Befehle "copy xyz.txt %appdata%" nutzen kann.

Meine Problematik besteht nun darin, dass die Daten in jedes vorhandene Windows Benutzerprofil unter \Anwendungsdaten eingefügt werden müssen. Da sich die Daten benutzerspezifisch unterscheiden, kann ich das Verzeichnis unter "All Users" nicht verwenden.

\user1\Anwendungsdaten\abc.txt
\user2\Anwendungsdaten\def.txt
\user3\Anwendungsdaten\ghi.txt
etc.

Wie kann ich das Verzeichnis Anwendungsdaten alle vorhandenen Benutzerprofile ermitteln um die Dateien einzufügen. Da Skript wird vom Administrator ausgeführt, so dass Zugriffsrechte kein Problem darstellen. Erschwerend kommt hinzu, dass sich die klassischen \Anwendungsdaten ab Windows Vista und aktuelle unter \AppData\Roaming befinden. Die Windows Umgebungsvariable %appdata% hilft mir hierbei leider nur für den aktuellen Benutzer weiter.

Habt ihr eine Idee?

Vielen Dank!

Content-ID: 130738

Url: https://administrator.de/contentid/130738

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

DerWoWusste
DerWoWusste 02.12.2009 um 10:25:18 Uhr
Goto Top
Hi.
Die Windows Umgebungsvariable %appdata% hilft mir hierbei leider nur für den aktuellen Benutzer weiter.
Nimm ein Anmeldeskript und lass das in %appdata% schreiben, dann passt es für jeden Benutzer. Das ist gängige Praxis.
miniversum
miniversum 02.12.2009 um 10:55:12 Uhr
Goto Top
Mit
dir %USERPROFILE%\..
bekommst du sie Benutzerkonten aufgelistet.
Diese liste kannst du dann mit
FOR /F "delims=" %%i in ('dir /b %USERPROFILE%\..') do echo %%i
durchgehen und halt statt dem echo den entsprechenden Befehl einsetzen.
Wenn du es genau haben willst kannst du noch %APPDATA% zerlegen und deinen usernamen duch die in der liste ersetzen:
FOR /F "delims=" %%i in ('dir /b %USERPROFILE%\..') do FOR /F "tokens=1,* delims=%username%" %%j in ('echo %APPDATA%') do echo %%j%%i%%k
Lionheart
Lionheart 02.12.2009 um 11:00:02 Uhr
Goto Top
Hi,

die Lösung ist mir bekannt. Kann ich in diesem Fall jedoch nicht anwenden, da dass Ganze beim Update einer Anwendung an verschiedenen PCs auch außerhalb meines Netzwerks durchgeführt werden muss.
Lionheart
Lionheart 02.12.2009 um 11:53:11 Uhr
Goto Top
Der Befehl "dir %USERPROFILE%\.." funktioniert nicht. Bastle gerade aber an einer Lösung. Werde das Ergebnis dann Posten.
miniversum
miniversum 02.12.2009 um 12:40:30 Uhr
Goto Top
hier bei mir auf nem Vista rechner gehts.
Versuchs mal so:
pushd "%USERPROFILE%"  
cd..
FOR /F "delims=" %%i in ('dir /b') do FOR /F "tokens=1,* delims=%username%" %%j in ('echo %APPDATA%') do echo %%j%%i%%k  
popd
Lionheart
Lionheart 02.12.2009 um 13:25:14 Uhr
Goto Top
Danke. Genau so hab ich es jetzt bereits auch gelöst.

Unter Vista geht das dir %userprofile%\.. unter XP leider nicht.
Biber
Biber 02.12.2009 um 13:56:22 Uhr
Goto Top
Moin Lionheart,

Zitat von @Lionheart:
Unter Vista geht das dir %userprofile%\.. unter XP leider nicht.
Ja nee, das hat nur indirekt mit der Betriebssystemversion XP oder Vi$ta zu tun..

Unter XP enthält (in fast allen üblichen Konstellationen) die Umgebungsvariable %USERSPROFILE% einen "Pfad mit Leerzeichen".
E.g. "C:\Dokumente und Einstellungen\Biber".
Unter Vi$ta ist kein Leerzeichen im Pfad "C:\Users\Whatever".

Funktionieren wir aber in beiden Fällen eine miniversum-Variante mit einem zusätzlichen Paar Anführungszeichen:
Demo am CMD-Prompt:
FOR /F "delims=" %i in ('dir /b "%USERPROFILE%\.."') do @echo %i  

Nur der Vollständigkeit halber, damit nicht aus diesem Beitrag irgendwann zitiert wird :"Unter Vista geht das dir %userprofile%\.. unter XP leider nicht." face-wink

Grüße
Biber