3k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von hugost Einsteiger_in (19 Punkte)
Habe folgendes Script nach langem Suchen gefunden:

set fso=createobject("scripting.filesystemobject")
if not fso.fileexists("test.html") then
msgbox "Datei 'test.html' nicht gefunden!",16
wscript.quit
end if
set o=fso.getfolder(fso.getparentfoldername(wscript.scriptfullname))
set f=o.files
for each ff in f
if right(lcase(ff.name),5)=".html" then fso.copyfile "test.html",ff.name,true
next
msgbox "Skript beendet!",64

Kann mir einer helfen dieses Script so zu erweitern, dass eine Datei

C;\Ordner\xyz\Musterbrief.xls

alle Excel-Dateien im beliebigen Unterordner z.B. K:\Test\Probe\

überschreibt?

Danke für Eure Hilfe.

Hugost

8 Antworten

0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
- ersetze "test.html" durch "C:\Ordner\xyz\Musterbrief.xls",
- ersetze fso.getparentfoldername(wscript.scriptfullname) durch "K:/Test/Probe"

und siehe:
- GetFolder Method
- CopyFile Method
- LCase Function
0 Punkte
Beantwortet von hugost Einsteiger_in (19 Punkte)
Leider bin ich des englischen nicht so mächtig und programmieren ist auch nicht so mein Ding, deshalb frage ich hier noch mal an:
Folgende Konstellation habe ich:

C:\Tmp\ersetze.vbs
C:\Tmp\Musterbrief.xls
C:\Tmp1\2012\Unterverzeichnis1\Brief_xyz.xls
C:\Tmp1\2012\Unterverzeichnis2\Brief_yzx.xls
C:\Tmp1\2012\Unterverzeichnis3\Brief_zxy.xls
usw.

Wenn ich die "ersetze.vbs" aufrufe, so sollen alle Inhalte der Exceldateien in den Unterverzeichnissen durch den Inhalt der Datei "Musterbrief.xls" ersetzt werden.

Ich habe also das Script wie folgt geändert:, leider bekomme ich eine Fehlermeldung und kann sie nicht deuten.

set fso=createobject("scripting.filesystemobject")
if not fso.fileexists("Musterbrief.xls") then
msgbox "Datei 'Musterbrief.xls' nicht gefunden!",16
wscript.quit
end if
set o=C:/Tmp1/2012
set f=o.files
for each ff in f
if right(lcase(ff.name),5)=".xls" then fso.copyfile "Musterbrief.xls",ff.name,true
next
msgbox "Skript beendet!",64

Könntet ihr mir bitte helfen, danke, Hugost.
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
wenn du eine fehlermeldung erhältst, ist es generell ratsam, diese hier zu posten.

in diesem fall kann ich aber schon sagen, daß Du die Änderungen nicht richtig umgesetzt hast.
Die Zeile ist falsch:
set o=C:/Tmp1/2012

es muss (vielleicht) heissen:
set o = fso.getfolder("C:/Tmp1/2012")


programmieren ist auch nicht so mein Ding

In Foren wie diesen bist Du willkommen mit Detailfragen, die man Dir gerne beantwortet.
Ohne Mitarbeit von Deiner Seite wirst Du nicht zum Ziel kommen.

Fertige Scripts gibts auf vielen Seiten zum Download, aber auch diese müssen immer angepasst werden, das lesen der Anleitungen lässt sich nicht vermeiden.

(Wenn Du bereit bist, Geld auszugeben, wird sich mit hoher Wahrscheinlichkeit auch in Foren jemand bereit erklären, das Problem für Dich zu lösen.)
0 Punkte
Beantwortet von hugost Einsteiger_in (19 Punkte)
Danke für Antwort und die Korrektur.

Ich wollte nicht mich bedienen lassen, sondern ich habe deshalb sehr lange nach solch einem Tool gesucht. Leider funktionierte ja meine Modifizierung auf *.xls-Dateien nicht, deshalb habe ich hier um Hilfe ersucht, dachte es wäre nur eine Kleinigkeit.

Das Script läuft jetzt zwar durch, aber es überschreibt nicht die alten Dateien mit der Musterdatei.

Ich will auch nicht nerven mit meinem Problem.
Danke für die Mühe.

Hügost
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Du musst noch ändern:
if right( lcase(ff.name), 4 ) = ".xls" then
...
fso.copyfile "Musterbrief.xls",ff.path,true

bei "Musterbrief.xls" wäre uU. auch eine pfadangabe sinnvoll.

ich hatte oben vergessen zu verlinken:
Right Function

Ich wollte nicht mich bedienen lassen...

es ist ja wirklich nur eine kleinigkeit.
Es ging mir nur darum, daß Du offensichtich nicht bereit bist, Dich selber mit Programmierung im allgemeinen und dem Code im speziellen auseinanderzusetzen, und ich will klarstellen, daß für solche Anliegen Foren nicht unbedingt zum Erfolg führen.

Beispielsweise hätte bei etwas Mitarbeit von Deiner Seite meine erste Antwort (abgesehen von dem vergessenen Link) Dein Problem wahrscheinlich gelöst.
Die Verlinkten Beschreibungen lassen sich auch ohne gute Englischkenntnisse verstehen, Beispiele gibt es dort auch.
0 Punkte
Beantwortet von hugost Einsteiger_in (19 Punkte)
Danke für Deine Tips, jetzt funktioniert es schon im Hauptverzeichnis "2012".

get fso=createobject("scripting.filesystemobject")
if not fso.fileexists("Musterbrief.xls") then
msgbox "Datei 'Musterbrief.xls' nicht gefunden!",16
wscript.quit
end if
set o = fso.getfolder("C:\Tmp1\2012")
set f=o.files
for each ff in f
if right(lcase(ff.name),4)=".xls" then fso.copyfile "Musterbrief.xls",ff.path,true
path = "C:\Tmp\"
next
msgbox "Skript beendet!",64

Eine Frage habe ich noch:
Gibt es einen Trick, wie man die Pfadangabe so verändern kann, dass es auch die Dateien in den Unterordnern unterhalb von 2012 austauscht oder benötigt man dafür eine Routine?

Danke.
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Dafür braucht man eine routine.
Du müsstest rekursiv alle unterordner, davon wieder alle unterordner usw. durchlaufen.

"o" ist bei Dir ein Folder object
Dieses hat verschiedene Eigenschaften.

Du benutzt zB. mit "o.files" die Eigenschaft Files.

Es gibt auch die Eigenschaft SubFolders
Dort gibt's wieder ein Beispiel zum durchlaufen der Unterordner.

Erklärung und Beispiel zu Recursion im allgemeinen:
Microsoft Windows 2000 Scripting Guide - Recursion
Das ist aber nicht VBScript sondern vermutlich Visual Basic.

Mit den Stichworten "vbscript recursion" findest Du viele Beispiele im Netz.
0 Punkte
Beantwortet von hugost Einsteiger_in (19 Punkte)
Herzlichen Dank für die vielen Tips.
Schade, dass es keine Funktionn dafür gibt.
(Hätte nie gedacht, dass es so aufwändig ist eine fast gleichwertige, funktionierene Routine auf meinen Wunsch hin zu manipulieren.)
Jetzt mache ich erst einmal Urlaub und danach mich ans Suchen und an die Routine.

Hugost
...