mtm
Goto Top

Word Dateien nach Vorlage suchen

Wir haben hier in der Firma demnächst wieder eine Änderung der Dokumentenvorlagen. Im gleichen Zug wollen wir die Anzahl von 130 auf ca. 40 zurückschrauben. Das Problem ist nun rauszufinden, welche Vorlagen wirklich benutzt werden. Die Dateien liegen lokal bei jedem User unter D:\DokVorlagen (als Beispiel) und da in den entsprechenden Ordnern (Intern / Extern / Abteilung). Wir können daher (weil lokal) nicht scannen, wann welche Datei das letzte mal genutzt wurde bzw. ob es überhaupt noch genutzt wird.

Die derzeit einzige Möglichkeit die mir eingefallen ist: Scannen der Abteilungs- / User- / Ablagelaufwerke (am Wochenende) nach .doc Dateien. Ist es möglich zu sehen, welche Dateien aus welcher Vorlage erzeugt wurden und gibt es Tools / Scripte dafür? Dann könnte man eine Nutzungsstatistik erstellen und danach aussortieren. Hat sowas schonmal wer gemacht?

Für jeden andere Idee bin ich im übrigen auch dankbar...

Content-ID: 17233

Url: https://administrator.de/forum/word-dateien-nach-vorlage-suchen-17233.html

Ausgedruckt am: 23.12.2024 um 01:12 Uhr

16640
16640 05.10.2005 um 14:06:07 Uhr
Goto Top
Wenn ihr die lokalen Pfade kennt, dann bau doch in das Loginscript ein DIR auf diese Pfade ein mit einer Umleitung in eine Textdatei auf dem Server.

Und alternativ: warum gehst Du nicht über die administrativen Freigaben auf die Clientrechner zum Scannen der Vorlagen?


hand/dba
MTM
MTM 05.10.2005 um 14:14:00 Uhr
Goto Top
Weil es 2500 Clientrechner sind, das wäre mir händisch zuviel Arbeit. Auch eine Auswertung der DIR Befehle wäre arg umfangreich, aber eine erste Idee, danke.
Swissler
Swissler 05.10.2005 um 14:33:10 Uhr
Goto Top
Warum um Gottes Willen sind bei 2500 Rechner die Vorlagen lokal ?????????

Ich würde das so schnell als möglich ändern, z. B. über Logon-Scripts o. ä. Dann hast Du nachher wenigsten Ruhe.

greets
MTM
MTM 05.10.2005 um 14:38:50 Uhr
Goto Top
Ja, leider. Ich habe das Gebiet übernommen und bisher wurde es so gemacht. Deswegen will ich auch die Anzahl jetzt mal reduzieren. Es wurde irgendwann mal beschlossen, dass die lokal liegen und damit ist's dann gut. Verteilung usw. ist kein Thema (diverse Methoden, je nachdem ob WinXP, Citrix, Laptop usw.), aber lokal ist erstmal gegeben. Frag mich nicht warum.

Ändern kann ich es erstmal nicht auf die Schnelle, das würde hier im Haus ewig dauern. Aber langfristig bestimmt mein Ziel, ja face-smile
Swissler
Swissler 05.10.2005 um 14:49:30 Uhr
Goto Top
Mein Beileid!

Versuch mal Treesize (http://www.jam-software.de/treesize/) ), vielleicht hilft Dir das Tool weiter. Du kannst damit auch auf jeden PC (über Admin-Shares), aber ist trotzdem Knochenarbeit.
8644
8644 05.10.2005 um 15:11:24 Uhr
Goto Top
Hi,

ich hab da mal ein bisschen probiert (Delphi). Mit etwas Zeit, kriege ich da was hin.
Ich könnte auf die Schnelle eine Textdatei zaubern, die du dann in Excel auswerten kannst.
Falls Interesse besteht, gib mal Bescheid!

Psycho
MTM
MTM 05.10.2005 um 15:14:12 Uhr
Goto Top
Kannst du auch den Dateinamen der Vorlagedatei auslesen (wird von Word gespeichert)? Dann wäre es eine echte Hilfe.
8644
8644 05.10.2005 um 15:18:58 Uhr
Goto Top
So ungefähr würde es aussehen

D:\Dokumente\xyz.doc;Template: c:\Vorlagen\normal.dot

Man kann da auch noch mehr Infos raus holen (letzte Änderung usw.)

Ich denke mal, dass ich das bis morgen hin bekommen könnte.

Psycho
MTM
MTM 05.10.2005 um 15:23:07 Uhr
Goto Top
Ideal wäre folgendes:

Pfad inkl. Dateiname;Vorlage;letzte Änderung (TT.MM.JJJJ)

Wenn du das hinkriegen könntest, wäre das doch eine arge Hilfe für mich.
8644
8644 05.10.2005 um 15:56:59 Uhr
Goto Top
ein paar Fragen noch:

->Ich würde alle lokalen Platten scannen?
->Soll das Proggi automatisch loslegen?
->Gibt es ein gemapptes Laufwerk für alle?

Dann könnte es so gehen: Progi in jenes LW legen und per Richtlinie( ist nicht mein Fach) starten. Für jeden Rechner eine Datei erstellen bzw. alles in eine schmeißen (ich weiß ja nicht wie viele das werden!) Die einträge per ";" trennen, damit kommt Excel dann klar.

Das Proggi an sich geht schon, muß nur noch ein paar Feinheiten ändern!

Psycho
Biber
Biber 05.10.2005 um 22:17:35 Uhr
Goto Top
Moin MTM,

wenns mal etwas länger dauert....

bzw. bis Psycho was Professionelles hat, hab ich solange einen Batch-Oneliner für Dich:
(ist alles in einer Zeile!)
--------snipp ListAllDocNDots.bat
@echo off & for /r E:\ %%i in (*.doc) do for /f %%a in ('type "%%i"^|find /i ".DOT"') do if errorlevel 0 echo %%~i;%%a;%%~ti  
----------snapp ListAllDocNDots.bat

Ausgabe bei mir:

E:\Microsoft\rk\W2KSupporttools\ldp.doc;Normal.dot;28.05.2001 23:05
E:\Microsoft\rk\W2KSupporttools\dskprtrb.doc;Normal.dot;28.05.2001 23:00
E:\Microsoft\rk\W2KSupporttools\dommig.doc;Normal.dot;20.03.2002 06:39
E:\Microsoft\rk\W2KSupporttools\dommig.doc;Windows;20.03.2002 06:39
E:\Microsoft\rk\W2KSupporttools\sreadme.doc;Normal.dot;19.04.2002 15:41
E:\Microsoft\rk\W2KSupporttools\iadstools.doc;Normal.dot;28.05.2001 23:06
E:\jokes\Windows_fehlermeldungen.doc;Normal.dot;30.08.2005 15:58
E:\jokes\revengeo.doc;Normal.dot;22.08.2005 10:38
....

einige Word-*docs haben mehrere Vorlagen, deshalb die innere FOR-Schleife.
(siehe die dommig.doc oben)

HTH
Frank / der Biber aus Bremen
8644
8644 06.10.2005 um 07:11:04 Uhr
Goto Top
Guten Morgen,

wenns mal etwas länger dauert....

... man hat ja noch andere Vepflichtungen! face-wink

Ich wäre dann aber auch soweit!
Das Proggi speichert die Ausgabe im Programmverzeichnis unter [Computername].csv
Es legt beim Start sofort los und beendet sich wieder, der User merkt kaum was - es geht recht schnell.

Falls Interesse besteht; PN mit Mail-Addi an mich und ab gehts.

Psycho
MTM
MTM 06.10.2005 um 07:46:22 Uhr
Goto Top
Am idealsten per Parameter, also Programm.exe <Pfad> <Logdatei>

Die Logdatei wird per Append geöffnet, notfalls lösch ich sie von Hand vorher.

Kommst du bei Pfad auch mit \\Server\Volume klar oder muss es gemappt sein?
8644
8644 06.10.2005 um 07:52:36 Uhr
Goto Top
Gib mir mal deine Mail-Adresse durch, dann schicke ich dir was zum testen.
Ist dann einfacher, für mich, deine Wünsche einzubauen!

Psycho
8644
8644 10.10.2005 um 10:04:00 Uhr
Goto Top
Guten Morgen,

auf Wunsch der Batch-Fraktion stelle ich mal vor, wie sowas unter Delphi aussehen könnte:

function GetFileProperty(const FileName: WideString): string;
var
i : Integer;
PropSetStg : IPropertySetStorage;
PropSpec : array[2..19] of TPropSpec;
PropStg : IPropertyStorage;
PropVariant : array[2..19] of TPropVariant;
Rslt : HResult;
S : string;
Stg : IStorage;
begin
Result := '';
try
OleCheck(StgOpenStorage(PWideChar(FileName), nil, STGM_READ or
STGM_SHARE_DENY_WRITE,
nil, 0, Stg));
PropSetStg := Stg as IPropertySetStorage;
OleCheck(PropSetStg.Open(FmtID_SummaryInformation,
STGM_READ or STGM_SHARE_EXCLUSIVE, PropStg));
for I := 2 to 19 do
begin
PropSpec[I].ulKind := PRSPEC_PROPID;
PropSpec[I].PropID := I;
end;
Rslt := PropStg.ReadMultiple(18, @propspec, @propvariant);
OleCheck(Rslt);
if Rslt <> S_FALSE then for I := 2 to 19 do
begin
S := '';
if PropVariant[I].vt = VT_LPSTR then
if Assigned(PropVariant[I].pszVal) then
S := PropVariant[I].pszVal;
case I of
2: S := Format('Title: %s', [S]);
3: S := Format('Subject: %s', [S]);
4: S := Format('Author: %s', [S]);
5: S := Format('Keywords: %s', [S]);
6: S := Format('Comments: %s', [S]);
7: Begin
S := Format(';%s', [S]);
Result := S;
End;
8: S := Format('Last saved by: %s', [S]);
9: S := Format('Revision number: %s', [S]);
10: S := Format('Total editing time: %g sec',
[Comp(PropVariant[I].filetime) / 1.0E9]);
11: S := Format('Last printed: %s',
[FileTimeToDateTimeStr(PropVariant[I].filetime)]);
12: S := Format('Create time/date: %s',
[FileTimeToDateTimeStr(PropVariant[I].filetime)]);
13: Begin
S := Format(';%s',
[FileTimeToDateTimeStr(PropVariant[I].filetime)]);
result := result + S;
End;
14: S := Format('Number of pages: %d', [PropVariant[I].lVal]);
15: S := Format('Number of words: %d', [PropVariant[I].lVal]);
16: S := Format('Number of characters: %d',
[PropVariant[I].lVal]);
17:; // thumbnail
18: S := Format('Name of creating application: %s', [S]);
19: S := Format('Security: %.8x', [PropVariant[I].lVal]);
end;

end;
finally
end;
end;

procedure GetAllFiles(mask: string);
var
search : TSearchRec;
directory : string;
property : String;
sl : TStringList;
i : Integer;
begin
sl := TStringList.Create;
directory := ExtractFilePath(mask);

find all files
if FindFirst(mask, $23, search) = 0 then
begin
repeat
Try
property := GetDocInfo(directory + search.Name);
Except
property := ';;';
End;
sl.Add(directory + search.Name + property);
until FindNext(search) <> 0;
end;
if FindFirst(directory + '*.*', faDirectory, search) = 0 then
begin
repeat
if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then
GetAllFiles(directory + search.Name + '\' + ExtractFileName(mask));
until FindNext(search) <> 0;
FindClose(search);
end;
sl.SaveToFile(ausgabe);
sl.Destroy;
end;

Mein Dank geht hierbei auch an eine sehr gute Delphi-Seite : http://www.delphi-tipps.de

Psycho
Biber
Biber 10.10.2005 um 10:08:47 Uhr
Goto Top
Die Batch-Fraktion dankt!

Biber, 2. Stellvertretender Sprecher und Alterspräsident