Per Batch Benutzer-Homeverzeichnis für PDF-Drucker auslesen und in Variable speichern
Ich habe bei uns einen PDF-Drucker im Netzwerk eingerichtet (basierend auf dem Eintrag unter https://www.administrator.de/index.php?content=115210), allerdings sollen die Dateien ins Homeverzeichnis des Benutzers reinkopiert werden.
Servus,
ich hät da gern mal ein Problem. Ich bin anscheinend zu blöd fürs Skripting oder was weiß ich und brauche dabei Hilfe. Ich habe einen Ghostscript PDF-Drucker bei uns im Netz eingerichtet und für zwei Kategorien eingerichtet, Lehrer und Schüler. Die erstellten PDF-Dokumente sollen ins Homeverzeichnis in den Unterordner "PDF" des zu druckenden Users reinkopiert werden. Bei den Lehrern ist es ganz einfach, da deren Homeverzeichnisse unter einem Verzeichnis liegen, nämlich D:\Daten\Lehrer\Home. Bei den Schülern ist es komplexer, da die in Klassen aufgeteilt sind und die Daten dementsprechend verteilt sind, z.B. D:\Daten\Schueler\Home\Klasse1, D:\Daten\Schueler\Home\Klasse2, D:\Daten\Schueler\Home\Klasse3... und darunter befinden sich die Home-Verzeichnisse der jeweiligen Schüler. Der Drucker arbeitet im Hintergrund mit einen Batchscript. Ich lege mal unsere Fassung der Lehrer mit bei.
Weiß jemand, wie ich das lösen kann? Ich wäre für jede Hilfe dankbar. Mein Ansatz war, mit dem Befehl das Verzeichnis auszulesen und in einer Variable zu speichern, aber das dauert ewig lange, bis er da etwas gefunden hat. Außerdem kriege ich es nicht gebacken, diese Ausgabe in eine Variable zu speichern.
Servus,
ich hät da gern mal ein Problem. Ich bin anscheinend zu blöd fürs Skripting oder was weiß ich und brauche dabei Hilfe. Ich habe einen Ghostscript PDF-Drucker bei uns im Netz eingerichtet und für zwei Kategorien eingerichtet, Lehrer und Schüler. Die erstellten PDF-Dokumente sollen ins Homeverzeichnis in den Unterordner "PDF" des zu druckenden Users reinkopiert werden. Bei den Lehrern ist es ganz einfach, da deren Homeverzeichnisse unter einem Verzeichnis liegen, nämlich D:\Daten\Lehrer\Home. Bei den Schülern ist es komplexer, da die in Klassen aufgeteilt sind und die Daten dementsprechend verteilt sind, z.B. D:\Daten\Schueler\Home\Klasse1, D:\Daten\Schueler\Home\Klasse2, D:\Daten\Schueler\Home\Klasse3... und darunter befinden sich die Home-Verzeichnisse der jeweiligen Schüler. Der Drucker arbeitet im Hintergrund mit einen Batchscript. Ich lege mal unsere Fassung der Lehrer mit bei.
set USER=%REDMON_USER%
set TITLE=%REDMON_DOCNAME:/=_%
set TITLE=%TITLE:\=_%
set TITLE=%TITLE::=_%
if not exist d:\Daten\Lehrer\Home\%user%\PDF mkdir d:\Daten\Lehrer\Home\%user%\PDF
c:\Programme\gs\gs8.64\bin\gswin32c.exe -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dNOSAFER -dAutoRotatePages=/PageByPage -dPDFSETTINGS=/prepress -dCompatibilityLevel=1.4 -sOutputFile="%1.pdf" %1
set filename=%DATE:~6,4%_%DATE:~3,2%_%DATE:~0,2%-%user%_%random%
move %1.pdf d:\daten\lehrer\home\%user%\PDF\%filename%.pdf
Weiß jemand, wie ich das lösen kann? Ich wäre für jede Hilfe dankbar. Mein Ansatz war, mit dem Befehl
dir D:\Daten\Schüler\Home /s /b /a:d | find "//Name des Benutzers//"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 124648
Url: https://administrator.de/forum/per-batch-benutzer-homeverzeichnis-fuer-pdf-drucker-auslesen-und-in-variable-speichern-124648.html
Ausgedruckt am: 12.04.2025 um 07:04 Uhr
29 Kommentare
Neuester Kommentar

Hallo,
kannst du die Umgebungsvariablen des Users
LOGONSERVER
HOMEDRIVE
HOMEPATH
USERNAME
nicht benutzen?
kannst du die Umgebungsvariablen des Users
LOGONSERVER
HOMEDRIVE
HOMEPATH
USERNAME
nicht benutzen?

Tut mir leid, ich kenne weder das Programm noch bin ich firm in Server-Strukturen.
Aber für dein Script hätte ich eine etwas beschleunigte Lösung:
In der Variablen wasweissich sollte dann der gewünschte Name stehen, wenn er denn gefunden wurde.
Die Codepage musst du wegen der Umlaute wechseln, wenn du das Script mit Notepad oder einem anderen Editor schreibst.
Wenn du dafür edit.com nutzt, kannst du die chcp weglassen.
Nur zur Info: dir /B fängt in Verbindung mit dem Parameter /S im Root des Laufwerks an, auch ohne die nicht gewünschten Ergebnisse anzuzeigen. Deshalb dauert das auch entsprechend lange. Wenn du in das zu durchsuchende Verzeichnis wechselst, kannst du nur /b verwenden und /S weglassen.
Edit 21:15 Uhr Fehlerhafte Zeile korrigiert.
Aber für dein Script hätte ich eine etwas beschleunigte Lösung:
chcp 1252
pushd R:\Daten\Schüler\Home{\und evtl noch die Klasse}
for /F %%a in ('dir /ad /b ^|find /i "Name des Benutzers"') do set "wasweissich=%%a"
popd
chcp 850
In der Variablen wasweissich sollte dann der gewünschte Name stehen, wenn er denn gefunden wurde.
Die Codepage musst du wegen der Umlaute wechseln, wenn du das Script mit Notepad oder einem anderen Editor schreibst.
Wenn du dafür edit.com nutzt, kannst du die chcp weglassen.
Nur zur Info: dir /B fängt in Verbindung mit dem Parameter /S im Root des Laufwerks an, auch ohne die nicht gewünschten Ergebnisse anzuzeigen. Deshalb dauert das auch entsprechend lange. Wenn du in das zu durchsuchende Verzeichnis wechselst, kannst du nur /b verwenden und /S weglassen.
Edit 21:15 Uhr Fehlerhafte Zeile korrigiert.

Servus,
bevor ich dir einen Tipp gebe- den du eigentlich suchst...
Mir scheint es etwas komplex und nicht ganz banal zu sein...
Bleibt ein Schüler sitzen, dann mußt du dessen Klasse ja auch irgendwo ändern.
Von daher würde ich eine textdatei auf dem Server hinterlegen, wo:
Das hilft dir dann nicht nur für dieses Problem weiter...
Gruß
bevor ich dir einen Tipp gebe- den du eigentlich suchst...
Mir scheint es etwas komplex und nicht ganz banal zu sein...
Bleibt ein Schüler sitzen, dann mußt du dessen Klasse ja auch irgendwo ändern.
Von daher würde ich eine textdatei auf dem Server hinterlegen, wo:
klasse1 Hans.Dampf
klasse2 Lisa.Loch
drinsteht und diese .txt dann auswerten...klasse2 Lisa.Loch
Das hilft dir dann nicht nur für dieses Problem weiter...
Gruß

Guten Morgen. Guck man nach weiter oben. 

Die Frage nach der Bedeutung beantwortet dir umfassend die entsprechende Hilfe zu jedem Befehl in der Eingabeaufforderung. 
help befehl
oder
befehl /?
help befehl
oder
befehl /?

ifmember.exe ist dann Dein Freund, bzw. ich würde einfach die passenden Attribute aus dem AD auslesen lassen.
Mache das nicht allzu häufig, daher kann ich da jetzt nichts genaueres zu sagen ich kann aber mal www.selfadsi.de empfehlen..
@81825
Könnte sein das meine Leitung im Augenblick noch länger ist als ohnehin üblich ... hab zuviel Freizeit....
Mache das nicht allzu häufig, daher kann ich da jetzt nichts genaueres zu sagen ich kann aber mal www.selfadsi.de empfehlen..
@81825
Könnte sein das meine Leitung im Augenblick noch länger ist als ohnehin üblich ... hab zuviel Freizeit....

Zitat von @81825:
Guten Morgen. Guck man nach weiter oben.
Guten Morgen. Guck man nach weiter oben.
Yupp
05. if not exist d:\Daten\Lehrer\Home\%user%\PDF mkdir d:\Daten\Lehrer\Home\%user%\PDF
mit dieser Zeile wird immer ein Verzeichnis d:\Daten\Lehrer\Home\%user%\PDF erstellt - egal ob das nun ein Lehrer oder Schüler ist.
Von daher müßte man den ganzen Kladderadatsch eh etwas neu schreiben.
Immer frei nach dem Motto - einer (Script) für alle (Fälle)
05. if exist d:\Daten\Lehrer\Home\%user% if not exist d:\Daten\Lehrer\Home\%user%\PDF mkdir d:\Daten\Lehrer\Home\%user%\PDF
wäre schonmal ein Anfang So mein Kindlein muß nun gewickelt werden..
Gruß

*ROFL*

Der Scriptschnipsel, den dich dir gepostet hatte, hat leider einen Fehler: Er funktioniert nur, wenn der gesuchte Benutzername auch als Verzeichnis existiert.
Nimm lieber den:
Nimm lieber den:
set wasweissich=
chcp 1252
pushd R:\Daten\Schüler\Home{\und evtl noch die Klasse}
for /F %%a in ('dir /ad /b ^|find /i "Name des Benutzers"') do set "wasweissich=%%a"
popd
chcp 850

Mein Kindlein schreit nicht - es kräht (noch)
sorry, aber wenn ich lese - du brauchst Hilfe beim scripten - dann ist der Tipp ein Script für alle schon das, was du brauchst - egal ob du nun danach gesucht hast - oder nicht.
Das Skript von mir oben ist die Fassung für die Lehrer. Die funktioniert so
einwandfrei, eben weil alle Home-Verzeichnisse der Lehrer unter
D:\Daten\Lehrer\Home liegen. Die Home-Verzeichnisse der Schüler
liegen unter
D:\Daten\Schüler\Home\<Klassenname>\<Benutzername>
und da kann ich das Skript nun mal nicht verwenden.
einwandfrei, eben weil alle Home-Verzeichnisse der Lehrer unter
D:\Daten\Lehrer\Home liegen. Die Home-Verzeichnisse der Schüler
liegen unter
D:\Daten\Schüler\Home\<Klassenname>\<Benutzername>
und da kann ich das Skript nun mal nicht verwenden.
ok -nochmal und wirklich sehe das als konstruktive Kritik...
Du hast eine Struktur:
- "Schüler" mit umlauten
- darunter dann Klassen
- darin die einzelnen Schüler....
Also mußt du am Ende des Schuljahres..
- - alle Schüler im Ordner \schüler\klasse10a löschen - oder den Ordner komplett
- - alle Schüler aus Klasse 9a in Ordner 10a verschieben - oder den Ordner umbenamsen
- - das gleiche für alle Klassen - von oben (10) nach unten (5)
Wenn es keinen dringenden Grund gibt, die Schüler in Klassen auf dem Home zusammenzufassen, würde ich mir das nicht antun wollen.
Da sind Fehler ja vorprogrammiert.
Die Lösung mit der For-Schleife scheint dabei wohl am ehesten zu funktionieren.
Die Frage ist wirklich - macht der ganze Towuhabohu mit den Klassen wirklich Sinn?Gruß

Nö.
ich hatte beim dir-Befehl den Parameter /s vergessen.
Der Parameter /s arbeitet rekursiv, d. h. er legt auch deshalb das Verzeichnis mehrfach an. /S darfst du nicht verwenden.
Du hast ganz einfach das Verzeichnis, das er durchsuchen soll, falsch definiert und "IT2008" vergessen.

Warum folgst du nicht dem Vorschlag, den TimoBeil dir hier gemacht hat?
Die Liste kannst du doch einfach erzeugen.
dir /a:d /s /b Pfad > irgendeinname.txt
Die Liste kannst du doch einfach erzeugen.
dir /a:d /s /b Pfad > irgendeinname.txt
Ich mische mich ja nur ungern in sowas ein, aber wäre das Abfragen des homedrives für den User per dsget user -hmdir (siehe auch http://technet.microsoft.com/en-us/library/cc732535%28WS.10%29.aspx ) nicht irgendwie einfacher?

Ich mische mich ja nur ungern in sowas ein,
Das wäre ein Fehler, sich nicht einzumischen
..... nicht irgendwie einfacher?
Garantiert. Und deshalb klinke ich mich auch aus.
Zum Abschluss noch ein informativer Link:

Zitat von @diemilz:
Das ist zwar korrekt, aber nicht das was ich suche. Das Skript von mir
oben ist die Fassung für die Lehrer.
Das ist zwar korrekt, aber nicht das was ich suche. Das Skript von mir
oben ist die Fassung für die Lehrer.
Zitat :
Immer frei nach dem Motto - einer (Script) für alle (Fälle)
Immer frei nach dem Motto - einer (Script) für alle (Fälle)
Nehme ich dann zurück und behaupte einmal richtig gemacht - immer funktionierend.
Du willst nicht zwei Datenbestände pflegen, aber zwei Bätche für (fast) das gleiche sind ok.
Zitat von @81825:
Garantiert. Und deshalb klinke ich mich auch aus.
Garantiert. Und deshalb klinke ich mich auch aus.
dito.