milzbrand
Goto Top

Batchdatei für automatischen Backup der Eigenen Dateien mit verschiedenen Profilen

Hallo erstmal,
Ich versuche gerade einen Multiboot USB, mit automatisierten Backup, Neuinstallation und Wiederherstellung des Backups per BAT zu programmieren.
Das Problem ist das es immer unterschiedliche Rechner mit unterschiedlichen Profilen sind.

Ich schreibe gerade an einer BAT in der ich an Kundenrechner, die neu zu Formatieren sind, die eigene Dateien zu sichern, eine Neuinstallation durchführen, Standartprogramme installiert und die Gesicherten Dateien wieder herstellt.
das Betriebssystem ist immer XP.
Alles haut soweit hin nur wenn mehrere Benutzer installiert sind, da komme ich nicht weiter.
Wenn nur ein Benutzer auf dem Rechner installiert ist ist das mit %userprofile% kein Problem.

Wie kann ich eine Abfrage starten die mir zb die eigenen Dateien von verschieden, immerwieder unterschiedlichen Benutzern ausliest.

zb: Die Ordnerstrucktur liest sich folgenderweise:

C:\Dokumente und Einstellungen\All Users
C:\Dokumente und Einstellungen\Toxilap
C:\Dokumente und Einstellungen\Admin
C:\Dokumente und Einstellungen\DAU
C:\Dokumente und Einstellungen\Default User
C:\Dokumente und Einstellungen\LocalService
C:\Dokumente und Einstellungen\NetworkService

Nun möchte ich von von den usern Toxilap, Admin und DAU die eigenen Dateien speichern.
Die Usernamen sind beim nächsten Rechner wieder ganz anders.

die Standart User wie All User, Defaultuser, LocalService und NetworkService sollen nicht gesichert werden.

Wie gesagt das aktuelle Konto ist kein Problem auszulenen aber die anderen zwei.

Ach ja wenn Ihr eine Lösung habt und die nur reinschreibt bin ich euch dankbar! Wenn Ihr mir aber noch zu den befehlszeilen was dazuschreibt wäre ich euch extrem Dankbar.

Danke schon mal im vorraus für eure Hilfe.

lg Toxilap

Content-Key: 156736

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

Printed on: April 26, 2024 at 09:04 o'clock

Member: bastla
bastla Dec 10, 2010 at 11:12:54 (UTC)
Goto Top
Hallo Milzbrand!

Als Grundlage / Denkanstoß zum Testen direkt an der Kommandozeile (daher nur %i und nicht %%i):
for /f "delims=" %i in ('dir /b /ad "%userprofile%\.."^|findstr /i /v /c:"All Users" /c:"Default User" /c:"LocalService" /c:"NetworkService"') do @echo "%i"
Die für "dir" und "findstr" verwendeten Optionen sollten sich mit der Online-Hilfe (zB "dir /?"') nachvollziehen lassen (ev mit Ausnahme der mehrfachen "/c:" - hier gilt die Regel: wenn einmal ein Suchbegriff (wegen enthaltener Leerzeichen) so angegeben wurde, müssen auch alle weiteren nach "/c:" geschrieben werden) ...

"%userprofile%\.." geht vom Profilordner des aktuellen Users eine Ebene nach oben und sollte sich daher auch zB für Vista / 7 (wo es ja keine "Dokumente und Einstellungen" gibt) verwenden lassen.

Alternativ (diesmal als Batch):
pushd "%userprofile%\.."  
for /f "delims=" %%i in ('dir /b /ad^|findstr /i /v /c:"All Users" /c:"Default User" /c:"LocalService" /c:"NetworkService"') do echo "%%i"  
popd
Hier musst Du Dir für die Verarbeitung (bisher nur durch
echo "%%i"
angedeutet) keine Gedanken mehr wegen des Pfades machen ...

Grüße
bastla
Member: Milzbrand
Milzbrand Dec 10, 2010 at 13:11:13 (UTC)
Goto Top
Erstmal dank Dir Bastla,

Eigendlich genau das was ich suche. ich habe es ein wenig verändert:

for /f "delims=" %%i in ('dir /b /ad^|findstr /i /v /c:"All Users" /c:"Default User" /c:"LocalService" /c:"NetworkService"') do set user=%user%%%i

Entschuldige meine unwissenheit aber wie könnte ich das noch verwirklichen das ich den einzelnen Usern ne Zahl zuordne?
also im oberen Fall

User1=Toxilap
User2=Admin
User3=DAU

Ich kenne zwar den Befehl set user%zahl%=%user%%%i
denke aber das ich das damit hier nicht weiterkomme.

Dank dir schonmal.


lg Toxilap
Member: bastla
bastla Dec 10, 2010 at 15:10:45 (UTC)
Goto Top
Hallo Milzbrand!

Wenn Du das wirklich brauchst (wozu eigentlich), dann etwa so:
@echo off & setlocal enabledelayedexpansion
set /a Nr=1
pushd "%userprofile%\.."  
for /f "delims=" %%i in ('dir /b /ad^|findstr /i /v /c:"All Users" /c:"Default User" /c:"LocalService" /c:"NetworkService"') do (  
    set "User!Nr!=%%i"  
    set /a Nr+=1
)
popd
Grüße
bastla

[Edit] Fehlendes "a" in Zeile 2 ergänzt [/Edit]
Member: Milzbrand
Milzbrand Dec 10, 2010 at 17:21:03 (UTC)
Goto Top
Hallo Bastla,

ich sitze hier nun schon geschlagene 2 Stunden und versuche die Lösung zu finden, ich will mir ja nicht nachsagen lassen es ist alles nur geklaut. fg

Deine Zeilen Passen soweit wobei im mittelteil es nicht das tut was es soll.

ich habe ein wenig rumgeschrieben und Ja ein Anfänger tut sich halt noch schwerer bzw hat noch nicht die geistigen Möglichkeiten.
Aus deinem
do (
set "User!Nr!=%%i"
set /a Nr+=1
)
habe ich gemacht
do (
set "User%Nr%=%%i"
set /a Nr=%Nr%+1
)

Leider zählt er in keinem der Fälle hoch sondern gibt immer nur User1 aus.

Wofür ich das brauche?
Wie geschrieben bekomme ich immer unterschiedliche Rechner mit den unterschiedlichsten Profilen, die ich erst sichern muss, danach das OS neuinstallieren und anschliessend die Daten wieder herstellen muss. bisher habe ich das immer umständlich per Drag and Drop gemacht. nun möchte ich den ganzen Prozess eben automatisieren.

dank dir nochmal für deine Hilfe.


lg Milzbrand
Member: Biber
Biber Dec 10, 2010 at 17:33:43 (UTC)
Goto Top
Moin Milzbrand,

die Schreibweise set "User!Nr!=%%i" , die bastla verwendet hat bewirkt, das die Variable !Nr! quasi erst genau dann aktuell "berechnet" wird, wenn der Programmablauf genau dort angelang. Die Variablenauflösung wird also "verzögert". Neudeutsch "Delayed expansion".

Wenn du keine "DelayedExpansion" verwendest, also die Variable User%Nr% statt Variable User!Nr! ansprichst, dann hat %Nr% immer noch denselben wert, wie er VOR Beginn der ganzen Programmzeile war.
Ganze Programmzeile=Zeile beginnend "FOR /F .....{bla} DO ( .."

Suche mal hier m Forum nach DelayedExpansion-> bevor dir das nicht richtig klar ist, solltest du NICHT irgendwelche %usersprofile% wegsichern.

Grüße
Biber
Member: Milzbrand
Milzbrand Dec 10, 2010 at 18:17:25 (UTC)
Goto Top
Hallo Biber,

Ich habe mir die Zeilen die Bastla geschrieben hat angesehen und versucht sie erstens zu verstehen und zweitens so zu schreiben das es geht.
Leider habe ich in diesem bereich nur Anfängerwissen das es mir aber erlaubt mit Batch einfache Struckturen auszuführen.
Das ein xcopy %userprofile%\Eigene Dateien zwingend mit delayedexpansion gehandhabt werden muss kann ich mir nicht vorstellen.
Vieleicht drücke ich mich auch nur falsch aus.
Fakt ist das das was Bastla geschrieben hat nicht hochzählt und ich mir nicht erklären kann wiso bzw. was ich ändern muss das es hochzählt.


lg Milzbrand
Member: bastla
bastla Dec 10, 2010 at 19:31:32 (UTC)
Goto Top
Hallo Milzbrand!

  • Fakt ist, dass in Zeile 2 ein "a" gefehlt hat (ist inzwischen oben nachgetragen), was dazu führte, dass zunächst nur eine Variable %User% entstanden ist.
  • Fakt ist auch, dass die weiteren User dann sehr wohl als %User1%, %User2%, ..., %Usern% erstellt wurden.
  • Fakt ist weiters, dass diese Variablen nur innerhalb des Batches zur Verfügung stehen - wenn Du als letzte Zeile noch
set User
hinzufügst, kannst Du das Ergebnis auch sehen.
  • Fakt ist schließlich, dass Du bisher noch kein Wort über den (vermeintlichen) Sinn dieser Nummerierung verloren hast.

Grüße
bastla
Member: Milzbrand
Milzbrand Dec 10, 2010 at 20:02:15 (UTC)
Goto Top
Juhu super Dankeeee es geht!
Nicht in deinen zeilen war der Fehler sondern in meinem kopf.
Manchmal sieht man den Wald vor lauter Bäumen nicht.

Die Nummerierung wird Folgenderweisse verwendet:

erster schritt
Backup der einzelnen User über das Netzwerk (\\lala\backup\rechner\user\eigene dateien)
In dem Backup wird eine Textdatei mit den einzelnen Usern und anderen variablen geschrieben. (Broser, Emailprogramm etc.)
zweiter schritt
Neuinstallation von Windows
dritter schritt
Auslesen der Textdatei
Erstellen der Userprofile laut der Textdatei
Automatisierte Installation der Programme und wiederherstellen der Daten (z.b. Lesezeichen)

Da ich die Variable User an mehreren Stellen in der Batch brauche ( sie hat bisher über 300 zeilen) dachte ich ist es das sinnvollste die User als User1 etc zu haben.
Warscheinlich denkst du dir jetzt da gibts einfachere Wege zum Ziel aber der erscheint mir am sinnvollsten.

Dank dir nochmals ganz sakrisch.

lg Milzbrand