Username / Profilname
Hallo,
ich will in einer Profil gespeicherten Datei einen bestimmten Pfad bestimmen:
"C:\Dokumente und Einstellungen\.....\Anwendungsdaten\Microsoft\Vorlagen"
Die Pünktchen sollen durch den Profilnamen ersetzt werden. Wie wird das geschrieben?
Ich habe Username, Profilname, Environ bereits ausprobiert.
Nur wenn ich den tatsächlichen Namen eintrage, z.B. MuellerManfr wird der Pfad gefunden.
Kann einer helfen?
Danke im voraus
ich will in einer Profil gespeicherten Datei einen bestimmten Pfad bestimmen:
"C:\Dokumente und Einstellungen\.....\Anwendungsdaten\Microsoft\Vorlagen"
Die Pünktchen sollen durch den Profilnamen ersetzt werden. Wie wird das geschrieben?
Ich habe Username, Profilname, Environ bereits ausprobiert.
Nur wenn ich den tatsächlichen Namen eintrage, z.B. MuellerManfr wird der Pfad gefunden.
Kann einer helfen?
Danke im voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 14322
Url: https://administrator.de/contentid/14322
Ausgedruckt am: 14.11.2024 um 15:11 Uhr
22 Kommentare
Neuester Kommentar
Wenn ich dich richtig verstehe, willst du eine Datei in die jeweiligen Heimatverzeichnisse von (fiktiven) 20 Usern kopieren - allerdings mit einem Befehl. Oder willst du eine Datei verschiedene Verzeichnisse durchforsten lassen (Log-Datei)? Im Endeffekt ist es die Selbe Lösung: dazu bräuchtest du eine Schleife, die eine Variable (deine Pünktchen) durch einen Usernamen ersetzt, die Datei kopiert / das Verzeichnis durchforstet und anschließend die Variable auf einen neuen Usernamen setzt. Dieses ist meines Wissens jedoch nicht im Dos-Prompt möglich und die User-Namen die eingesetzt werden sollen, müssen auch entweder manuell einmal angegeben, oder aus einer Datenbank ausgelesen werden. Nun kommt es darauf an, wieviele User betroffen sind - ich denke, dass sich der Aufwand für 10-15 User nicht lohnt und du schneller bist, wenn du alles manuell eingibst.
O.K., da war Atti58 schneller - aber sowas meinte ich (btw. geht das nun im Dos-Prompt, oder nicht?)
O.K., da war Atti58 schneller - aber sowas meinte ich (btw. geht das nun im Dos-Prompt, oder nicht?)
Hallo,
versuch mal folgendes:
Gruß,
Tim
[EDIT: Der Punkt ist, dass man bei Visual Basic die Variable nicht einfach mitten in die Anführungsstriche schreiben kann, da sie sonst als normaler String interpretiert wird. Du musst den Pfad also in zwei Strings zerlegen und die Variable durch "&" mit den String concatieren, also zusammensetzen.]
versuch mal folgendes:
UserName = Environ("UserName")
' Dann die Strings und die Variable mit & zusammenführen
' Die Variable "Pfad" ist dann der komplette Pfad mit dem Usernamen
Pfad = "C:\Dokumente und Einstellungen\" & UserName & "\Anwendungsdaten\Microsoft\Vorlagen"
Gruß,
Tim
[EDIT: Der Punkt ist, dass man bei Visual Basic die Variable nicht einfach mitten in die Anführungsstriche schreiben kann, da sie sonst als normaler String interpretiert wird. Du musst den Pfad also in zwei Strings zerlegen und die Variable durch "&" mit den String concatieren, also zusammensetzen.]
Hallo,
poste doch mal ein größeres Stück Code (den gesamten Abschnitt, wo Du den Pfad ermittelst, etc.). So kann man nicht direkt sagen, woran es liegen könnte...
Gruß,
Tim
P.S.: Du hast die Variablen schon mit DIM deklariert, oder? Also:
Dim UserName As String
Dim Pfad As String
Wenn nicht, dann ist das auf jeden Fall ein Fehler.
poste doch mal ein größeres Stück Code (den gesamten Abschnitt, wo Du den Pfad ermittelst, etc.). So kann man nicht direkt sagen, woran es liegen könnte...
Gruß,
Tim
P.S.: Du hast die Variablen schon mit DIM deklariert, oder? Also:
Dim UserName As String
Dim Pfad As String
Wenn nicht, dann ist das auf jeden Fall ein Fehler.
Hallo,
glaub nicht, dass das etwas mit "glauben" zu tun hat. Die Frage wurde doch in "VB und .NET" gepostet - und %USERNAME% könnte er doch nur nutzen, wenn diese Variable in einem Systemaufruf direkt verwendet wird.
Da er aber keinen Code gepostet hat, der darauf schließen lässt, gehe ich mal davon aus, dass er den Usernamen über die Möglichketen abfragen muss, die die Programmiersprache bietet (und das ist bei VB wohl bevorzugt die Abfrage über die "environ"-Funktion).
Oder begehe ich da einen massiven Denkfehler???
Gruß,
Tim
glaub nicht, dass das etwas mit "glauben" zu tun hat. Die Frage wurde doch in "VB und .NET" gepostet - und %USERNAME% könnte er doch nur nutzen, wenn diese Variable in einem Systemaufruf direkt verwendet wird.
Da er aber keinen Code gepostet hat, der darauf schließen lässt, gehe ich mal davon aus, dass er den Usernamen über die Möglichketen abfragen muss, die die Programmiersprache bietet (und das ist bei VB wohl bevorzugt die Abfrage über die "environ"-Funktion).
Oder begehe ich da einen massiven Denkfehler???
Gruß,
Tim
@Atti
dummes katzi.... nicht mal lesen kanns....
weißt ja eh:, wie heißt's so schön in der geliebten Zauberflöte: ein Weib tut wenig, plaudert viel...
dummes katzi.... nicht mal lesen kanns....
weißt ja eh:, wie heißt's so schön in der geliebten Zauberflöte: ein Weib tut wenig, plaudert viel...
<strike>Welch Wunder, diemal kein Einzeiler-Batch </strike>
Mit einem zeitlichen Abstand von 30 Min. und etwas abgekühltem Gemüt fällt mir auf: Ich hab mich wohl etwas im Ton vergriffen.
Wollte niemanden persönlich angreifen, der mir nichts getan hat, Sorry!!
~~~~~~~~~~~~~~~~~~~
Sind ein paar Zeilen mehr, aber wie heißt es so schön: "Wer schreibt, der bleibt!"
Das Script setzt voraus, das eine deutsche OS-Version installiert ist, also der Pfad zum Profilverzeichnis 31 Zeichen lang ist. Kann aber mit Instr auch dynamisch gemacht werden.
Außerdem ist der anzufügende Pfad auf "\Anwendungsdaten\Microsoft\Vorlagen" fixiert, wobei man das sicher aus der Registry auslesen könnte
' ### TemplatesPath.vbs ###
Const USER_PROFILE = &H28&
Set objShell = CreateObject("Shell.Application")
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
Set objFolder = objShell.Namespace(USER_PROFILE)
Set objFolderItem = objFolder.Self
strTemplatePath = "\Anwendungsdaten\Microsoft\Vorlagen"
strProfilePath = Left(objFolderItem.Path, 31)
strUserName = WshNetwork.UserName
strDomain = WshNetwork.UserDomain
strPathNew = strProfilePath & strUserName & strTemplatePath
MsgBox strPathNew
' ###################
Mit einem zeitlichen Abstand von 30 Min. und etwas abgekühltem Gemüt fällt mir auf: Ich hab mich wohl etwas im Ton vergriffen.
Wollte niemanden persönlich angreifen, der mir nichts getan hat, Sorry!!
~~~~~~~~~~~~~~~~~~~
Sind ein paar Zeilen mehr, aber wie heißt es so schön: "Wer schreibt, der bleibt!"
Das Script setzt voraus, das eine deutsche OS-Version installiert ist, also der Pfad zum Profilverzeichnis 31 Zeichen lang ist. Kann aber mit Instr auch dynamisch gemacht werden.
Außerdem ist der anzufügende Pfad auf "\Anwendungsdaten\Microsoft\Vorlagen" fixiert, wobei man das sicher aus der Registry auslesen könnte
' ### TemplatesPath.vbs ###
Const USER_PROFILE = &H28&
Set objShell = CreateObject("Shell.Application")
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
Set objFolder = objShell.Namespace(USER_PROFILE)
Set objFolderItem = objFolder.Self
strTemplatePath = "\Anwendungsdaten\Microsoft\Vorlagen"
strProfilePath = Left(objFolderItem.Path, 31)
strUserName = WshNetwork.UserName
strDomain = WshNetwork.UserDomain
strPathNew = strProfilePath & strUserName & strTemplatePath
MsgBox strPathNew
' ###################
Falls es Wordbasic sein soll, hab ich den schwarzen Gürtel....
In einem Wordmakro bekommst Du mit dem Befehl
x$ = Environ("USERNAME")
den Loginnamen des aktuellen Benutzer.
Den Benutzerdefinierten Vorlagenpfad kannst Du mit
zB mit
myPath$="C:\blablubb\"+x$+"\Vorlagen\"
Options.DefaultFilePath(Path:=wdUserTemplatesPath) = MyPath$
verändern.
hihi langsam kommt mir vor, wir drehen hier auf der Glatze Locken... was möchtest Du denn genau machen wassermann?
widderkatzi
In einem Wordmakro bekommst Du mit dem Befehl
x$ = Environ("USERNAME")
den Loginnamen des aktuellen Benutzer.
Den Benutzerdefinierten Vorlagenpfad kannst Du mit
zB mit
myPath$="C:\blablubb\"+x$+"\Vorlagen\"
Options.DefaultFilePath(Path:=wdUserTemplatesPath) = MyPath$
verändern.
hihi langsam kommt mir vor, wir drehen hier auf der Glatze Locken... was möchtest Du denn genau machen wassermann?
widderkatzi
Nööööö, <font=color=blue>gemini</font>, keine Sorge,
bei jedem Stück Sourcecode, das länger als eine Zeile wird, bekomme ich immer so einen komischen "Compile error in Line 2"... deshalb bleib ich freiwillig bei meinen kleinen Onelinern.
Aber trotzdem hab ich Dein Script nicht ganz verstanden, denn der
objFolderItem.Path entspricht doch IMMER exakt dem strProfilePath & strUserName in der vorletzten Zeile. Da es doch bei sowohl bei "objFolder" wie auch bei "strUserName = WshNetwork.UserName" um denselben User geht.
Dann kannst Du ohne Informationsverlust auch die vorletzte Zeile ändern auf: strPathNew = objFolderItem.Path & strTemplatePath ..?? Oder hab ich es jetzt mit den Augen? (Ernstgemeinte Verständnisfrage).
Wenn ich VBScript könnte, hätte ich wahrscheinlich zusammengetrümmert:
' ### TemplatesPath2.vbs ###
Set objWshShell = CreateObject("Wscript.Shell")
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
strProfilePath = objWshShell.SpecialFolders("AllUsersDesktop")
strProfilePath = Left(strProfilePath, Len(strProfilePath)-Len("\AllUsers.WINNT\Desktop"))
strTemplatePath = "\Anwendungsdaten\Microsoft\Vorlagen"
strUserName = WshNetwork.UserName
strPathNew = strProfilePath & vbCrLf & strUserName & strTemplatePath
MsgBox strPathNew
' ###################
..aber für heute schließe ich mich <font color=blue>la gattina's</font> Einwurf an - wir sollten nochmal <font color=blue>wassermann</font> in Ruhe fragen, was er genau vorhat....
ich hätte zwar auch noch ein GetObject("LDAP://cn=Biber,ou=xx,dc=firma,dc=com") mit einem ProfilePath irgendwo rumliegen, aber ich glaub irgendwie gar nicht mehr, dass es nötig ist.
Liebe Wochenend-Grüße an alle Zwillinge, Wasser- und Frodermänner, Widderinnen , cystras und Attis
vom Widderbiber aus Bremen
P.S @13830 Selbstverständlich geht alles vom DOS-Prompt. *ggg
bei jedem Stück Sourcecode, das länger als eine Zeile wird, bekomme ich immer so einen komischen "Compile error in Line 2"... deshalb bleib ich freiwillig bei meinen kleinen Onelinern.
Aber trotzdem hab ich Dein Script nicht ganz verstanden, denn der
objFolderItem.Path entspricht doch IMMER exakt dem strProfilePath & strUserName in der vorletzten Zeile. Da es doch bei sowohl bei "objFolder" wie auch bei "strUserName = WshNetwork.UserName" um denselben User geht.
Dann kannst Du ohne Informationsverlust auch die vorletzte Zeile ändern auf: strPathNew = objFolderItem.Path & strTemplatePath ..?? Oder hab ich es jetzt mit den Augen? (Ernstgemeinte Verständnisfrage).
Wenn ich VBScript könnte, hätte ich wahrscheinlich zusammengetrümmert:
' ### TemplatesPath2.vbs ###
Set objWshShell = CreateObject("Wscript.Shell")
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
strProfilePath = objWshShell.SpecialFolders("AllUsersDesktop")
strProfilePath = Left(strProfilePath, Len(strProfilePath)-Len("\AllUsers.WINNT\Desktop"))
strTemplatePath = "\Anwendungsdaten\Microsoft\Vorlagen"
strUserName = WshNetwork.UserName
strPathNew = strProfilePath & vbCrLf & strUserName & strTemplatePath
MsgBox strPathNew
' ###################
..aber für heute schließe ich mich <font color=blue>la gattina's</font> Einwurf an - wir sollten nochmal <font color=blue>wassermann</font> in Ruhe fragen, was er genau vorhat....
ich hätte zwar auch noch ein GetObject("LDAP://cn=Biber,ou=xx,dc=firma,dc=com") mit einem ProfilePath irgendwo rumliegen, aber ich glaub irgendwie gar nicht mehr, dass es nötig ist.
Liebe Wochenend-Grüße an alle Zwillinge, Wasser- und Frodermänner, Widderinnen , cystras und Attis
vom Widderbiber aus Bremen
P.S @13830 Selbstverständlich geht alles vom DOS-Prompt. *ggg
Aber trotzdem hab ich Dein Script nicht ganz verstanden, denn der
objFolderItem.Path entspricht doch IMMER exakt dem
strProfilePath & strUserName in der vorletzten Zeile. Da es
doch bei sowohl bei "objFolder" wie auch bei "strUserName =
WshNetwork.UserName" um denselben User geht.
Dann kannst Du ohne Informationsverlust auch die vorletzte Zeile ändern auf:
strPathNew = objFolderItem.Path & strTemplatePath ..?? Oder
objFolderItem.Path entspricht doch IMMER exakt dem
strProfilePath & strUserName in der vorletzten Zeile. Da es
doch bei sowohl bei "objFolder" wie auch bei "strUserName =
WshNetwork.UserName" um denselben User geht.
Dann kannst Du ohne Informationsverlust auch die vorletzte Zeile ändern auf:
strPathNew = objFolderItem.Path & strTemplatePath ..?? Oder
Das ist schon richtig Frank, objFolderItemPath gibt C:\Dokum...\<<a>username<a>> zurück.
Wenn ich wassermann richtig verstanden habe, will er <<a>username<a>> durch etwas anderes eretzten.
Ich nehme also den ersten Teil bis zum 31. Zeichen, den braucht man in jedem Fall, und setze dann halt den Usernamen wieder ein, es muss ja was drinstehen.
strUserName kann man aber belegen wie man will, strUserName = "Sepp" oder auch GetOject("LDAP://...").
Primär ging es ja um Stringverarbeitung, wie ersetze ich einen Teil durch einen anderen.
Die Pünktchen sollen durch den Profilnamen ersetzt werden.
Wie wird das geschrieben?
Ob die Rechte das dann auch zulassen steht natürlich auf einem anderen Blatt.Wie wird das geschrieben?
Außerdem hat sich wassermann nicht sehr über den Zweck des Scripts ausgelassen.
~~~~~~~~~
Bei den Onelinern heißt es dann Compile error at char 437 *gg*
Ach sooooooo, @gemini,
Die Pünktchen sollen durch den Profilnamen ersetzt werden.
Wie wird das geschrieben?
hab wieder zu flüchtig gelesen... Das geht echt nicht als CMD-Oneliner ...da brauch ich drei Zeilen, wenn alles dokumentiert sein soll... Wie wird das geschrieben?
Moin, Wassermann,
sorry, nicht verstanden.. bin jetzt eher verwirrt durch Deine Erklärungen...
Oder in C:\Dokumente und Einstellungen\Admistrator\AnwendungsdatenMicrosoft\Vorlagen?
und in dieser *dot steht also..
Folgt da 2 Zeilen später eine Zeile a la Samtpfötchen <font color=blue>Options.DefaultFilePath(Path:=wdUserTemplatesPath) = BasisPfad$ </font>?
Das kann m.E. weder jemand so programmiert geschweige denn an 1500 PCs verteilt haben. Ausgeschlossen. Weder Admin noch Praktikant.
Und verstanden hab ich auch einen weiteren Punkt immer noch nicht: hat (im Sollzustand) jede/r Anwender/in seine/ihre eigenen Vorlagen? Oder ist die Vorgabe, dass alle die identischen (Firmen-) Vorlagen und Standard-Dots verwenden müssen und diese auf die lokalen Rechner unter C:\...Vorlagen kopiert werden?
Sonst poste doch bitte mal dat Scriptchen, oder hat das mehr als 20 Zeilen?
Immer noch staunend
Biber
sorry, nicht verstanden.. bin jetzt eher verwirrt durch Deine Erklärungen...
In dem Verzeichnis C:\........\Vorlagen sind Dokumentenvorlagen gespeichert.
In C:\Dokumente und Einstellungen\MaierSepp\AnwendungsdatenMicrosoft\Vorlagen?Oder in C:\Dokumente und Einstellungen\Admistrator\AnwendungsdatenMicrosoft\Vorlagen?
Ich erhalte also immer mein Profil und kann somit auf meine eigenen Dots zugreifen.
?? Deine Dots sind auf jedem der 1500 PCs auf Laufwerk C:\ gespeichert?? Erstaunlich... Macht das Sinn?Deswegen gibt es eine Dot im Startup-Verzeichnis, in der stehen soll:
ähmm.. dieser Zeitenwechsel .... es gibt eine (baugleiche) *.Dot in jedem StartUp-Verzeichnis, in der heute steht ....ist das der heutige Zustand? Auf 1500 PCs?und in dieser *dot steht also..
Public Const BasisPfad = "C:\Dokumente und Einstellungen\MaierSepp\AnwendungsdatenMicrosoft\Vorlagen".
... na gut, auch ohne VBA-Kenntnisse... da steht halt "Const BasisPfad"... was passiert den mit dieser Konstanten?Folgt da 2 Zeilen später eine Zeile a la Samtpfötchen <font color=blue>Options.DefaultFilePath(Path:=wdUserTemplatesPath) = BasisPfad$ </font>?
Das kann m.E. weder jemand so programmiert geschweige denn an 1500 PCs verteilt haben. Ausgeschlossen. Weder Admin noch Praktikant.
Und verstanden hab ich auch einen weiteren Punkt immer noch nicht: hat (im Sollzustand) jede/r Anwender/in seine/ihre eigenen Vorlagen? Oder ist die Vorgabe, dass alle die identischen (Firmen-) Vorlagen und Standard-Dots verwenden müssen und diese auf die lokalen Rechner unter C:\...Vorlagen kopiert werden?
Sonst poste doch bitte mal dat Scriptchen, oder hat das mehr als 20 Zeilen?
Immer noch staunend
Biber
Mir gehts wie Biber
Wenn jeder der 1500 seine eigenen Vorlagen hat ist das ja in Ordnung. Zwar ziemlich ungewöhlich für so große Organisationen, aber jeder User hat seine Vorlagen bei der Anmeldung zur Verfügung.
Wenn du den Vorlagenpfad auf eine anderes Profil verbiegen willst wird das problematisch, weil Nicht-Administratoren keine Rechte auf die Profile anderer haben.
In diesem Fall müsstest du alle 1500 User zu Admins machen, was nicht empfehlenswert ist. Allerdings brauchst du dich dann über Arbeitmangel nicht mehr zu beklagen
Wenn es dir allerdings um ein Standard-Vorlagenverzeichnis für alle User geht, kannst du das über Gruppenrichtlinien festlegen. Ganz ohne Scripting.
Dazu musst du die ADMs für die jeweilige Office-Version auf dem DC importieren.
Ich hab jetzt grad die für Office XP da; hier sind die entspr. Richtlinien in:
Benutzerkonfig. > Administr. Vorlagen > Microsoft Office XP > Shared paths > User templates path | Workgroup templates path
Ein Verzeichnis auf einem Server freigeben, die Vorlagen reinkopieren und den UNC-Pfad in die Richtlinie eintragen
Wenn jeder der 1500 seine eigenen Vorlagen hat ist das ja in Ordnung. Zwar ziemlich ungewöhlich für so große Organisationen, aber jeder User hat seine Vorlagen bei der Anmeldung zur Verfügung.
Wenn du den Vorlagenpfad auf eine anderes Profil verbiegen willst wird das problematisch, weil Nicht-Administratoren keine Rechte auf die Profile anderer haben.
In diesem Fall müsstest du alle 1500 User zu Admins machen, was nicht empfehlenswert ist. Allerdings brauchst du dich dann über Arbeitmangel nicht mehr zu beklagen
Wenn es dir allerdings um ein Standard-Vorlagenverzeichnis für alle User geht, kannst du das über Gruppenrichtlinien festlegen. Ganz ohne Scripting.
Dazu musst du die ADMs für die jeweilige Office-Version auf dem DC importieren.
Ich hab jetzt grad die für Office XP da; hier sind die entspr. Richtlinien in:
Benutzerkonfig. > Administr. Vorlagen > Microsoft Office XP > Shared paths > User templates path | Workgroup templates path
Ein Verzeichnis auf einem Server freigeben, die Vorlagen reinkopieren und den UNC-Pfad in die Richtlinie eintragen