Interne Linkliste mit VBS auf Integrität überprüfen
VBS soll Interne Linkliste verifizieren, also ob für alle Links Dateien vorhanden sind und ob für alle Dateien im Arbeitsordner Verlinkungen bestehen und ggf die nötigen Anderungen durchführen und auf Nachfrage die Aufteilung der Liste vornehmen
Hallo. Ich habe hier einen Ablaufplan entwickelt, aber leider wenig Kenntnisse in VBS.
Kann mir jemand weiterhelfen?
Ablaufplan:
Arbeitsordner abfragen und Pfad aus LinkListe ermitteln.
Dateien im Arbeitsordner ermitteln.
Überprüfen, ob alle Dateinamen nur Buchstaben( inkl. Sonderzeichen !) Zahlen und "_" enthalten, ggf ändern.
Änderungen in Protokolldatei ProtokollNameDatModi eintragen.
Linknamen aus LinkListe ermitteln
Alle Leerzeichen entfernen und mit "_ " verbinden / dddd_gggg_2
Vergleiche beide Datensätze.
Wenn Datei fehlt, nimm modifizierten Linknamen dddd_gggg_2 und speichere im Arbeitsordner mit Endung .php als leere Datei ab.
Erstellung in ProtokollNameDatNew abspeichern.
Wenn Link fehlt, nimm Dateinamen, ersetze _ mit " " und entferne .php.
Erstelle Link unter Verwendung des Pfades aus Linkliste, füge Linknamen an der
alphabetischen Position ein.
Damit ist die Übereinstimmung von Links mit Dateien sichergestellt.
Abfrage Linkliste aufteilen?
Nein = Ende
Ja = Anzahl der Dateien pro Ordner mit Abfrage ermitteln und nach Schema:
Die ersten x Dateien in den ersten Ordner, die zweiten x Dat in den zweiten usw.
Abfrage: Ordner fortlaufend Nummerieren oder Namen aus ListeNamenOrdner einlesen?
Ja = fortlaufende Nummer Nein = Namen einlesen
Abfrage: Dateien fortlaufend Nummerieren oder Namen aus ListeNamenLinks einlesen?
Ja = fortlaufende Nummer Nein = Namen einlesen
In beiden Fällen Datei anlegen mit Endung .php und den Link in die Datei reinschreiben, so das sonst nichts in der Datei steht, also kein Header, body usw.
Also liegt im Ordner "1" die Datei 1.php mit dem ersten Link der Liste als Inhalt.
Anschließend den Link zu der Datei 1.php in Protokolldatei = ProtokollNewNameLinklist reinschreiben
Oder hat jemand eine andere Idee, wie man die Aufgabenstellung lösen kann?
Grüße
Fränky
Hallo. Ich habe hier einen Ablaufplan entwickelt, aber leider wenig Kenntnisse in VBS.
Kann mir jemand weiterhelfen?
Ablaufplan:
Arbeitsordner abfragen und Pfad aus LinkListe ermitteln.
Dateien im Arbeitsordner ermitteln.
Überprüfen, ob alle Dateinamen nur Buchstaben( inkl. Sonderzeichen !) Zahlen und "_" enthalten, ggf ändern.
Änderungen in Protokolldatei ProtokollNameDatModi eintragen.
Linknamen aus LinkListe ermitteln
Alle Leerzeichen entfernen und mit "_ " verbinden / dddd_gggg_2
Vergleiche beide Datensätze.
Wenn Datei fehlt, nimm modifizierten Linknamen dddd_gggg_2 und speichere im Arbeitsordner mit Endung .php als leere Datei ab.
Erstellung in ProtokollNameDatNew abspeichern.
Wenn Link fehlt, nimm Dateinamen, ersetze _ mit " " und entferne .php.
Erstelle Link unter Verwendung des Pfades aus Linkliste, füge Linknamen an der
alphabetischen Position ein.
Damit ist die Übereinstimmung von Links mit Dateien sichergestellt.
Abfrage Linkliste aufteilen?
Nein = Ende
Ja = Anzahl der Dateien pro Ordner mit Abfrage ermitteln und nach Schema:
Die ersten x Dateien in den ersten Ordner, die zweiten x Dat in den zweiten usw.
Abfrage: Ordner fortlaufend Nummerieren oder Namen aus ListeNamenOrdner einlesen?
Ja = fortlaufende Nummer Nein = Namen einlesen
Abfrage: Dateien fortlaufend Nummerieren oder Namen aus ListeNamenLinks einlesen?
Ja = fortlaufende Nummer Nein = Namen einlesen
In beiden Fällen Datei anlegen mit Endung .php und den Link in die Datei reinschreiben, so das sonst nichts in der Datei steht, also kein Header, body usw.
Also liegt im Ordner "1" die Datei 1.php mit dem ersten Link der Liste als Inhalt.
Anschließend den Link zu der Datei 1.php in Protokolldatei = ProtokollNewNameLinklist reinschreiben
Istzustand: Arbeitsordner/1/Test.php
Link in ProtokollNewNameLinklist: 1/Test.php
Oder hat jemand eine andere Idee, wie man die Aufgabenstellung lösen kann?
Grüße
Fränky
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 67337
Url: https://administrator.de/forum/interne-linkliste-mit-vbs-auf-integritaet-ueberpruefen-67337.html
Ausgedruckt am: 22.12.2024 um 21:12 Uhr
55 Kommentare
Neuester Kommentar
Hallo Fraenky!
Vielleicht in weiterer Folge besser hier als per Mail ...
Grüße
bastla
Vielleicht in weiterer Folge besser hier als per Mail ...
In diesem zugegebenermaßen seltenen Fall: Dateiname.txt.php
würde nach der Bearbeitung doch "Dateiname" überbleiben oder?, also würde als Beschreibung eher gelten: Alles links vom ersten "." wird genommen.Oder?
Es würde "Dateiname.txt" bleiben - wenn Du Alles links vom ersten "." haben willst, musst Du InStr() anstelle von InStrRev() verwenden.sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind).
Gibt es überhaupt die Möglichkeit, wie unter Dos, die Parameter und Syntax der einzelnen Befehle der einzelnen Dienste abzufragen?
Soferne Du eine Online-Hilfe/-Referenz meinst (in der Offline-Version ): http://www.microsoft.com/downloads/details.aspx?familyid=01592C48-207D- ... bzw alternativ eine deutschsprachige Version, zB von hier: http://wsh-vbs.de/scr56de.chm/script56.chm ...Grüße
bastla
Hallo Fraenky!
Außerdem würde ich vielleicht generell noch eine andere Strategie vorschlagen: Wenn Du ohnehin alle Dateien des Arbeitsordners verlinken willst, könntest Du vorweg für diese Dateien neue, richtige, Links erstellen und mit den berichtigten "alten" Links in der Datenbank zusammenfassen. Die weitere Vorgangsweise könnte Dir bekannt vorkommen: alle (alten und neuen) Links sortieren und die sortierte Liste so ausgeben, dass Duplikate (unter Ausschaltung der Groß- und Kleinschreibung) eliminiert werden - eigentlich hast Du den dafür erforderlichen Code schon.
Zum Thema "Schliefe wird nur einmal ausgeführt": Eine Schleife ist es erst, wenn Du einen Schleifenkopf und -fuß verwendest, also etwa:
Grüße
bastla
Kannst Du das in einen Code gießen?
Heute sicher nicht mehr ...Außerdem würde ich vielleicht generell noch eine andere Strategie vorschlagen: Wenn Du ohnehin alle Dateien des Arbeitsordners verlinken willst, könntest Du vorweg für diese Dateien neue, richtige, Links erstellen und mit den berichtigten "alten" Links in der Datenbank zusammenfassen. Die weitere Vorgangsweise könnte Dir bekannt vorkommen: alle (alten und neuen) Links sortieren und die sortierte Liste so ausgeben, dass Duplikate (unter Ausschaltung der Groß- und Kleinschreibung) eliminiert werden - eigentlich hast Du den dafür erforderlichen Code schon.
Zum Thema "Schliefe wird nur einmal ausgeführt": Eine Schleife ist es erst, wenn Du einen Schleifenkopf und -fuß verwendest, also etwa:
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True)
DataList.MoveFirst
Do While Not DataList.EOF 'Schleifenkopf
oLinkNamen.WriteLine DataList.Fields.Item("Text")
DataList.MoveNext
Loop 'Schleifenfuß
oLinkNamen.Close
Grüße
bastla
Hallo Fraenky!
Zum Testen fehlt mir momentan die Zeit, daher nur als Entwurf:
Ich habe die einzelnen Arbeitsschritte in eine für mich sinnvollere Reihenfolge gebracht und etwas deutlicher gekennzeichnet.
Neu hinzugekommen ist (weil übersichtlicher: als eigene Function) "SonderKonvert()" - für einen dieser Funktion übergebenen Text werden alle in der Sonderzeichen-Datenbank enthaltenen Konvertierungen in einem Arbeitsgang vorgenommen und als Ergebnis ein vollständig konvertierter Text zurückgeliefert.
Im übrigen wäre anzumerken, dass die Link-Datenbank bei der derzeitigen Vorgangsweise keinen wirklichen Sinn hat - es würde eigentlich genügen, jede Zeile nach dem Einlesen, Überprüfen und Konvertieren sofort wieder in die neue Datei "LinkNamen" zu schreiben - das Zwischenspeichern in der Datenbank bringt dabei eigentlich nichts, und eine Sortierung, welche ursprünglich der Grund für den Einsatz der Datenbank war, wird auch nicht vorgenommen ...
Grüße
bastla
Zum Testen fehlt mir momentan die Zeit, daher nur als Entwurf:
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind
'sPath = auch Arbeitsordner
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt"
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt"
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt"
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt"
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8
'###### Argumente prüfen - Pfad festlegen ######
If WScript.Arguments.Count > 0 Then
sArg = WScript.Arguments(0)
If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei
sPath = fso.GetFile(sArg).Path
sPath = Left(sPath, InStrRev(sPath, "\") - 1)
Else 'oder ev eines Ordners
If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path
End If
End If
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog
Set oFolder = CreateObject("Shell.Application") _
.BrowseForFolder(0, "Ordner w„hlen", 16, 17)
If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden
sPath = Arbeitsordner
Else
sPath = oFolder.Self.Path
End If
End If
Const adVarChar = 200'Datenbankfelder
Const MaxCharacters = 255
Const adFldIsNullable = 32
'###### Sonderzeichen-Datenbank aufbauen und befüllen ######
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable
SonderList.Fields.Append "SonderNam", adVarChar, MaxCharacters, adFldIsNullable
SonderList.Open
Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading)
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende
aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen
If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar
SonderList.AddNew
SonderList("Sonder") = aZeile(0)
SonderList("SonderDat") = aZeile(1)
SonderList("SonderNam") = aZeile(2)
SonderList.Update
End If
Loop
oSonderzeichen.Close
'###### Link-Datenbank aufbauen und befüllen ######
Set DataList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen
DataList.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable 'Feld "URL" definieren
DataList.Fields.Append "Text", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren
DataList.Open
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen
lInCounter = 0
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende
aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen
lInCounter = lIncounter + 1
If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile:
'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen)
'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen)
'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen)
'Zerlegung des 3. Teiles:
If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text
oProtokoll.WriteLine Right(" " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """")
Else
sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"
sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"
If aZeile(1) <> "" Or sText <> "" Then
DataList.AddNew 'neuen Datensatz erstellen
DataList("URL") = aZeile(1) 'Feld "URL" befüllen
DataList("Text") = SonderKonvert(sText) 'Feld "Text" befüllen; dazu vorweg Sonderzeichen konvertieren
DataList.Update '... und Datensatz eintragen
Else
'Eintrag in das Protokoll:
'Alle Teile zusammenfassen,
'dabei die entfernten Anführungszeichen wieder einfügen und
'Zeile in Protokolldatei schreiben
oProtokoll.WriteLine Right(" " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """")
End If
End If
Else
'anderer Zeilenaufbau - wäre näher zu untersuchen
'zumindest Protokolleintrag erstellen
oProtokoll.WriteLine Right(" " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """")
End If
Loop
oLinkListe.Close
oProtokoll.Close
'###### Linknamen in Datei schreiben ######
Set oLinkNamen = fso.OpenTextFile(LinkNamen, ForWriting, True)
DataList.MoveFirst 'beim ersten Datensatz beginnen ...
Do While Not DataList.EOF
oLinkNamen.WriteLine DataList.Fields.Item("Text")
DataList.MoveNext
Loop
oLinkNamen.Close
'###### Dateinamen einlesen und (ggf berichtigt) in Datei schreiben ######
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen
Set oVerlinkteDateien = fso.OpenTextFile(VerlinkteDateien, ForWriting, True)'Hier wird die Datei "VerlinkteDateien.txt" geöffnet.
For Each File in Folder.Files 'Hier wird für jede Datei in Arbeitsordner der Name abgelegt.
sNameTemp = Left(File.Name, InStrRev(File.Name, ".") -1)'Damit wird alles vor dem letzten "." genommen (auch wenn mehr als 4 Zeichen abzuschneiden sind).
oVerlinkteDateien.WriteLine Replace(sNameTemp, "_", " ") 'Ersetzen von "_" mit " "
Next
oVerlinkteDateien.Close
'##################################### Ende des Hauptprogramms #####################################
'###### Funktion zum Konvertieren von Sonderzeichen ######
Function SonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
sTemp = Replace(sTemp, SonderList.Fields.Item("SonderNam"), SonderList.Fields.Item("Sonder"))
SonderList.MoveNext
Loop
SonderKonvert = sTemp
End Function
Neu hinzugekommen ist (weil übersichtlicher: als eigene Function) "SonderKonvert()" - für einen dieser Funktion übergebenen Text werden alle in der Sonderzeichen-Datenbank enthaltenen Konvertierungen in einem Arbeitsgang vorgenommen und als Ergebnis ein vollständig konvertierter Text zurückgeliefert.
Im übrigen wäre anzumerken, dass die Link-Datenbank bei der derzeitigen Vorgangsweise keinen wirklichen Sinn hat - es würde eigentlich genügen, jede Zeile nach dem Einlesen, Überprüfen und Konvertieren sofort wieder in die neue Datei "LinkNamen" zu schreiben - das Zwischenspeichern in der Datenbank bringt dabei eigentlich nichts, und eine Sortierung, welche ursprünglich der Grund für den Einsatz der Datenbank war, wird auch nicht vorgenommen ...
Grüße
bastla
Hallo Fraenky!
DataList("Text") = SonderKonvert(sText)
In der Function wird natürlich vorausgesetzt, dass die "SonderList"-Datenbank bereits erstellt (eingelesen) wurde, was beí einer Verwendung in einem anderen Script zu berücksichtigen wäre.
Zur Vorgangsweise:
In der Schleife über alle Sonderzeichen wird einfach versucht, jedes Sonderzeichen zu ersetzen, unabhängig davon, ob es tatsächlich in "sTemp" enthalten ist: Wenn enthalten, wird ersetzt, wenn nicht, bleibt der Variableninhalt eben unverändert - vielleicht nicht die effizienteste, aber eine effektive Lösung.
Eine Lösung für das Vergleichen hatte ich oben schon vorgeschlagen: Alle Daten (aus den beiden Dateien) in eine gemeinsame Datenbank stellen, die Datenbank sortieren und danach nur jene Datensätze, die sich vom Vorgänger unterscheiden, in die Ergebnisdatei schreiben.
Alternativ dazu müsste in einer (äußeren) Schleife jeder Satz der einen Datei eingelesen und in einer weiteren (inneren) Schleife mit jedem Satz der anderen Datei verglichen werden. Optimieren könnte man den Vorgang, indem die zweite Datei sortiert gespeichert wird, sodass ich das Vergleichen vorzeitig abbrechen kann - etwa, wenn ein Link mit dem Buchstaben "F" beginnt, ist es nicht erforderlich, mit Einträgen der Vergleichsdatei, welche mit "G" oder höher beginnen, zu vergleichen.
Grüße
bastla
... sondern durch die Funktion SonderKonvert beim schreiben erledigt.
Genau genommen bereits beim Eintragen in die Link-Datenbank:DataList("Text") = SonderKonvert(sText)
In der Function wird natürlich vorausgesetzt, dass die "SonderList"-Datenbank bereits erstellt (eingelesen) wurde, was beí einer Verwendung in einem anderen Script zu berücksichtigen wäre.
Zur Vorgangsweise:
In der Schleife über alle Sonderzeichen wird einfach versucht, jedes Sonderzeichen zu ersetzen, unabhängig davon, ob es tatsächlich in "sTemp" enthalten ist: Wenn enthalten, wird ersetzt, wenn nicht, bleibt der Variableninhalt eben unverändert - vielleicht nicht die effizienteste, aber eine effektive Lösung.
Mit welchem Befehl muß den der Vergleich der einzelnen Datensätze in zwei schon geschriebenen Dateien erfolgen?
In den Dateien kann nicht verglichen werden, dazu müssen die Datensätze wieder eingelesen werden - deshalb auch meine seinerzeitige Frage nach dem Sinn des Schreibens in die einzelnen Dateien ...Eine Lösung für das Vergleichen hatte ich oben schon vorgeschlagen: Alle Daten (aus den beiden Dateien) in eine gemeinsame Datenbank stellen, die Datenbank sortieren und danach nur jene Datensätze, die sich vom Vorgänger unterscheiden, in die Ergebnisdatei schreiben.
Alternativ dazu müsste in einer (äußeren) Schleife jeder Satz der einen Datei eingelesen und in einer weiteren (inneren) Schleife mit jedem Satz der anderen Datei verglichen werden. Optimieren könnte man den Vorgang, indem die zweite Datei sortiert gespeichert wird, sodass ich das Vergleichen vorzeitig abbrechen kann - etwa, wenn ein Link mit dem Buchstaben "F" beginnt, ist es nicht erforderlich, mit Einträgen der Vergleichsdatei, welche mit "G" oder höher beginnen, zu vergleichen.
Grüße
bastla
Hallo Fraenky!
So verlockend die Idee auch sein mag, alle Daten in eine einzige Tabelle zu packen - das wird nix!
Jeder Datensatz einer solchen Tabelle muss den gleichen Aufbau haben, und ich kann nicht (sinnvoll) Teilbereiche von Datensätzen (mal 20 solche, dann 3000 eigentlich ganz andere, dann noch welche, ...) bilden. Die Aufteilung (zumindest zwischen Sonderzeichentabelle und Linkliste) sollte also jedenfalls beibehalten werden.
Grüße
bastla
So verlockend die Idee auch sein mag, alle Daten in eine einzige Tabelle zu packen - das wird nix!
Jeder Datensatz einer solchen Tabelle muss den gleichen Aufbau haben, und ich kann nicht (sinnvoll) Teilbereiche von Datensätzen (mal 20 solche, dann 3000 eigentlich ganz andere, dann noch welche, ...) bilden. Die Aufteilung (zumindest zwischen Sonderzeichentabelle und Linkliste) sollte also jedenfalls beibehalten werden.
Grüße
bastla
Hallo Fraenky!
Alternativvorschlag mit folgendem Ablauf:
Zusätzlich erforderlich waren die Sonderzeichen-Konvertierungen "Sonder --> SonderLink" bzw "Sonder --> SonderDat" für das Erstellen der Links der im Arbeitsordner vorhandenen Dateien sowie eine ergänzte "Sonderzeichen.txt":
Bei dem von Dir vorgeschlagenen Ablauf wäre hinsichtlich der Umsetzung eine Besonderheit zu berücksichtigen: Es gibt keine Beziehung zwischen den beiden Datentabellen "LinkDat" und "DateiDat", sodass für jeden Vorgang "lösche LinkName in LinkDat" zunächst der zu löschende Datensatz in der "LinkDat" hätte gesucht werden müssen ...
Grüße
bastla
Alternativvorschlag mit folgendem Ablauf:
- bestehende Linkliste in Datenbank einlesen mit sofortiger Kontrolle der verlinkten Dateien
- nicht vorhandene Dateien erstellen
- existierende Dateien einlesen und als Links in die Datenbank schreiben
- Sortierung nach URL, dadurch folgen die jeweiligen doppelten Sätze unmittelbar aufeinander
- Vergleich mit dem vorhergehenden Datensatz, und nur wenn unterschiedlich,
- Link in die Ergebnisdatei schreiben
Arbeitsordner = "C:\skript\" 'Arbeitsordner, in dem die verlinkten Dateien sind
'sPath = auch Arbeitsordner
VerlinkteDateien = "C:\skript2\Liste_verifizieren\VerlinkteDateien.txt"
LinkListe = "C:\skript2\Liste_verifizieren\Sortiert.txt"
Protokoll = "C:\skript2\Liste_verifizieren\Protokoll.txt"
LinkNamen = "C:\skript2\Liste_verifizieren\LinkNamen.txt"
Sonderzeichen = "C:\skript2\Liste_verifizieren\Sonderzeichen.txt"
Endergebnis = "C:\skript2\Liste_verifizieren\Fertig.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8
'###### Argumente prüfen - Pfad festlegen ######
If WScript.Arguments.Count > 0 Then
sArg = WScript.Arguments(0)
If fso.FileExists(sArg) Then 'Aufruf mit Übergabe einer Datei
sPath = fso.GetFile(sArg).Path
sPath = Left(sPath, InStrRev(sPath, "\") - 1)
Else 'oder ev eines Ordners
If fso.FolderExists(sArg) Then sPath = fso.GetFolder(sArg).Path
End If
End If
If sPath = "" Then 'Kein (gültiger) Pfad übergeben, daher Dialog
Set oFolder = CreateObject("Shell.Application") _
.BrowseForFolder(0, "Ordner w„hlen", 16, 17)
If TypeName(oFolder) = "Nothing" Then 'Kein Pfad gewählt, daher Default-Arbeitsordner verwenden
sPath = Arbeitsordner
Else
sPath = oFolder.Self.Path
End If
End If
Const adVarChar = 200'Datenbankfelder
Const MaxCharacters = 255
Const adFldIsNullable = 32
'###### Sonderzeichen-Datenbank aufbauen und befüllen ######
Set SonderList = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen
SonderList.Fields.Append "Sonder", adVarChar, MaxCharacters, adFldIsNullable
SonderList.Fields.Append "SonderDat", adVarChar, MaxCharacters, adFldIsNullable
SonderList.Fields.Append "SonderLink", adVarChar, MaxCharacters, adFldIsNullable
SonderList.Open
Set oSonderzeichen = fso.OpenTextFile(Sonderzeichen, ForReading)
Do While Not oSonderzeichen.AtEndOfStream 'Schleife bis zum Dateiende
aZeile = Split(oSonderzeichen.ReadLine, ",") 'Zeile einlesen und am Komma zerteilen
If UBound(aZeile) = 2 Then '2 Kommata gefunden - Zeile verwendbar
SonderList.AddNew
SonderList("Sonder") = aZeile(0)
SonderList("SonderDat") = aZeile(1)
SonderList("SonderLink") = aZeile(2)
SonderList.Update
End If
Loop
oSonderzeichen.Close
'###### Link-Datenbank aufbauen und befüllen ######
Set LinkDat = CreateObject("ADOR.Recordset") 'Datenbankobjekt erstellen
LinkDat.Fields.Append "URL", adVarChar, MaxCharacters, adFldIsNullable 'Feld "URL" definieren
LinkDat.Fields.Append "LinkName", adVarChar, MaxCharacters, adFldIsNullable 'Feld "Text" definieren
LinkDat.Open
Set oProtokoll = fso.OpenTextFile(Protokoll, ForWriting, True) 'Protokolldatei zum Schreiben öffnen; altes Protokoll überschreiben
Set oLinkListe = fso.OpenTextFile(LinkListe, ForReading) 'Datei zum Lesen öffnen
lInCounter = 0
Do While Not oLinkListe.AtEndOfStream 'Schleife bis zum Dateiende
aZeile = Split(oLinkListe.ReadLine, """") 'Zeile einlesen und an den Anführungszeichen zerteilen
lInCounter = lIncounter + 1
If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden - 3 Teile:
'1. Teil = aZeile(0): alles vor URL (vor dem ersten Anführungszeichen)
'2. Teil = aZeile(1): URL (gefunden zwischen Anführungszeichen)
'3. Teil = aZeile(2): alles nach URL (nach dem zweiten Anführungszeichen)
'Zerlegung des 3. Teiles:
If InStr(aZeile(2), "<") < 2 Then 'fehlerhafter Link-Text
oProtokoll.WriteLine Right(" " & CStr(lInCounter), 4) & " -- " & Join(aZeile, """")
Else '>expulso</a></p>
sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"
sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"
If aZeile(1) <> "" Or sText <> "" Then
LinkDat.AddNew 'neuen Datensatz erstellen
LinkDat("URL") = aZeile(1) 'Feld "URL" befüllen
LinkDat("LinkName") = sText 'Feld "Text" befüllen
LinkDat.Update '... und Datensatz eintragen
'Überprüfen, ob die verlinkte Datei vorhanden ist und, falls nicht, diese erstellen
aDatei = Split(aZeile(1), "/") 'an den "/" unterteilen ...
sDatei = aDatei(UBound(aDatei)) '... und den letzten Teil als Dateinamen verwenden
sDatei = SonderDatSonderKonvert(sDatei) 'Sonderzeichen konvertieren
sDateiMitPfad = sPath & "\" & sDatei
If Not fso.FileExists(sDateiMitPfad) Then 'existiert die Datei noch nicht, ...
Set oNeueDatei = fso.OpenTextFile(sDateiMitPfad, ForWriting, True) '... dann erstellen
End If
Else
'Eintrag in das Protokoll:
oProtokoll.WriteLine Right(" " & CStr(lInCounter), 4) & " __ " & Join(aZeile, """")
End If
End If
Else
'anderer Zeilenaufbau - wäre näher zu untersuchen
'zumindest Protokolleintrag erstellen
oProtokoll.WriteLine Right(" " & CStr(lInCounter), 4) & " ][ " & Join(aZeile, """")
End If
Loop
oLinkListe.Close
oProtokoll.Close
'###### Alle Links in der Datenbank verweisen jetzt auf existierende Dateien ... ######
sURL = LinkDat.Fields.Item("URL")
sURLPfad = Left(sURL, InStrRev(sURL, "/")) 'URLPfad ermitteln
'###### Alle im Arbeitsordner vorhandenen Dateien ebenfalls in Link-Datenbank eintragen ######
Set Folder = fso.GetFolder(sPath )'Hier wird der Inhalt des Arbeitsordners zugewiesen
For Each File in Folder.Files 'Hier wird jede Datei im Arbeitsordner überprüft und ggf in die Liste aufgenommen
sDatei = File.Name
sDateiName = Left(sDatei, InStrRev(sDatei, ".") - 1) 'Namen isolieren
sDateiTyp = Mid(sDatei, InStrRev(sDatei, ".")) 'Typ isolieren
If LCase(sDateiTyp) = ".php" Then 'nur PHP-Dateien
LinkDat.AddNew 'neuen Datensatz erstellen
LinkDat("URL") = sURLPfad & SonderDatKonvert(sDatei) 'Feld "URL" befüllen
LinkDat("LinkName") = SonderLinkKonvert(Replace(sDateiName, "_", " ")) 'Feld "LinkName" befüllen; dazu vorweg Sonderzeichen konvertieren
LinkDat.Update '... und Datensatz eintragen
End If
Next
'###### Die Datenbank enthält jetzt alle existierenden Dateien, wobei alle
' bereits früher in der Liste vorhandenen doppelt eingetragen sind ######
LinkDat.Sort = "URL"
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForWriting, True) 'Zieldatei öffnen; ev bereits vorhandene Datei überschreiben
sPrevURL = "" 'Startwerte für Satzvergleich setzen
LinkDat.MoveFirst 'beim ersten Datensatz beginnen ...
Do Until LinkDat.EOF '... und bis zum letzten durchgehen
'Unterschied zum vorhergehenden Datensatz?
If LCase(LinkDat.Fields.Item("URL")) <> LCase(sPrevURL) Then
'keine Übereinstimmung der URL mit vorigem Datensatz, daher Ausgabezeile zusammensetzen und schreiben
oEndergebnis.WriteLine "<p><a href=""" & _
LinkDat.Fields.Item("URL") & _
""">" & _
LinkDat.Fields.Item("LinkName") & _
"</a></p>"
'letzte geschriebene Daten merken
sPrevURL = LinkDat.Fields.Item("URL")
End If
'nächsten Datensatz auswählen
LinkDat.MoveNext
Loop
'Ausgabedatei schließen
oEndergebnis.Close
'##################################### Ende des Hauptprogramms #####################################
'###### Funktion zum Konvertieren von SonderLink in Sonder ######
Function SonderLinkSonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
sTemp = Replace(sTemp, SonderList.Fields.Item("SonderLink"), SonderList.Fields.Item("Sonder"))
SonderList.MoveNext
Loop
SonderLinkSonderKonvert = sTemp
End Function
'###### Funktion zum Konvertieren von SonderDat in Sonder ######
Function SonderDatSonderKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
sTemp = Replace(sTemp, SonderList.Fields.Item("SonderDat"), SonderList.Fields.Item("Sonder"))
SonderList.MoveNext
Loop
SonderDatSonderKonvert = sTemp
End Function
'###### Funktion zum Konvertieren von Sonder in SonderLink ######
Function SonderLinkKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
sTemp = Replace(sTemp, SonderList.Fields.Item("Sonder"), SonderList.Fields.Item("SonderLink"))
SonderList.MoveNext
Loop
SonderLinkKonvert = sTemp
End Function
'###### Funktion zum Konvertieren von Sonder in SonderDat ######
Function SonderDatKonvert(sUnkonvertiert)
sTemp = sUnkonvertiert
SonderList.MoveFirst
Do While Not SonderList.EOF
sTemp = Replace(sTemp, SonderList.Fields.Item("Sonder"), SonderList.Fields.Item("SonderDat"))
SonderList.MoveNext
Loop
SonderDatKonvert = sTemp
End Function
,%20,
À,%C0,À
Á,%C1,Á
Â,%C2,Â
Ã,%C3,Ã
Ä,%C4,Auml;
Ç,%C7,Ç
È,%C8,È
É,%C9,É
Ê,%CA,Ê
Ì,%CC,Ì
Í,%CD,Í
Õ,%D5,Õ
Ö,%D6,Ö
Ú,%DA,Ú
Ü,%DC,Ü
à,%E0,à
á,%E1,á
â,%E2,â
ã,%E3,ã
ä,%E4,ä
ç,%E7,ç
è,%E8,è
é,%E9,é
ê,%EA,ê
ì,%EC,ì
í,%ED,í
ó,%F3,ó
ô,%F4,ô
õ,%F5,õ
ö,%F6,ö
ú,%FA,ú
ü,%FC,ü
Grüße
bastla
Hallo Fraenky!
Versuch es mit einer Sicherheitsabfrage vorweg:
Grüße
bastla
Versuch es mit einer Sicherheitsabfrage vorweg:
If InStrRev(sDatei, ".") > 1 Then
sDateiName = Left(sDatei, InStrRev(sDatei, ".") - 1) 'Namen isolieren
End If
Kannst Du die Funktionalität noch insoweit erweitern ...
Ich hatte daran gedacht, aber mir dann überlegt, dass Du das vielleicht selbst machen möchtest.Grüße
bastla
Hallo Fraenky!
Grüße
bastla
Wenn in der LinkListe Namen ohne Link sind ...
Welchen Sinn sollte es haben, einen Namen einzutragen, zu dem es keine Datei gibt (denn wenn es die Datei gibt, wird der Link ohnehin erstellt)? Da würde ich eher dazu raten, anstelle des Namenseintrages eine leere Datei zu erstellen - dann wird der Rest vom Script erledigt.Grüße
bastla
Hallo Fraenky!
mt") meinst.
Zunächst wäre zu klären, welche Inhalte die beiden Dateien eigentlich haben sollten - dass in "LinkNamenNeu" sämtliche Links inkl Duplikate geschrieben werden, ist sicher nicht beabsichtigt, aber eine Konsequenz der Platzierung in der Schleife für alle Datenbankeinträge.
In die "GesammtLinkNamen"-Datei werden zunächst alle Namen der neu erstellten Dateien und danach (BTW: Das Schließen und Neu-Öffnen der Ausgabedatei hat in diesem Zusammenhang eigentlich keinen Sinn - im Gegenzug fehlt dann auch noch das nochmalige Schließen) alle Namen der insgesamt vorhandenen Dateien (also nicht nur der ".php"-Dateien) geschrieben (was dazu führt, dass die neu erstellten Dateien doppelt vorkommen und auch ev Dateinamen anderer Dateitypen enthalten sein können).
Nochmals daher die Frage: Was soll in die beiden Dateien?
Grüße
bastla
Leider ist die Datei LinkNamenNeu größer als die GesammtLinkNamen Datei. Kannst Du mir da mal meinen Fehler aufzeigen?
Ich nehme nicht an, dass Du den orthografischen Fehler ("GesamZunächst wäre zu klären, welche Inhalte die beiden Dateien eigentlich haben sollten - dass in "LinkNamenNeu" sämtliche Links inkl Duplikate geschrieben werden, ist sicher nicht beabsichtigt, aber eine Konsequenz der Platzierung in der Schleife für alle Datenbankeinträge.
In die "GesammtLinkNamen"-Datei werden zunächst alle Namen der neu erstellten Dateien und danach (BTW: Das Schließen und Neu-Öffnen der Ausgabedatei hat in diesem Zusammenhang eigentlich keinen Sinn - im Gegenzug fehlt dann auch noch das nochmalige Schließen) alle Namen der insgesamt vorhandenen Dateien (also nicht nur der ".php"-Dateien) geschrieben (was dazu führt, dass die neu erstellten Dateien doppelt vorkommen und auch ev Dateinamen anderer Dateitypen enthalten sein können).
Nochmals daher die Frage: Was soll in die beiden Dateien?
Zum nächsten Absatz möchte ich noch wissen, wie die Zeile (Replace(sDateiName, "_", " ")) zu schreiben ist, weil ich die Ersetzungen ja schon oben für die GesammtLinkNamen gemacht habe. Wenn ich Replace aber einfach weglasse, bekomme ich eine Fehlermeldung.
Wenn nichts mehr zu ersetzen ist, kostet das "Replace" zwar etwas Laufzeit, schadet aber nicht - daher solltest Du es (zumindest bis zur Entscheidung, was wann in die beiden fraglichen Dateien geschrieben werden soll) dabei belassen.Grüße
bastla
Hallo Fraenky!
platzieren.
nur den Linktext in "GesamtLinkNamen" schreiben.
Grüße
bastla
LinkNamenNeu = Alle Links, die neu erstellt wurden, weil mehr Dateien vorhanden waren; zum besseren Überblick.
Mit der derzeitigen Programmlogik lassen sich diese Dateien nicht unmittelbar eruieren (da Datensätze, zu denen es kein Duplikat gibt, nicht gesondert ermittelt werden). Als Ansatz (falls wirklich notwendig) müsste ein Datensatz vorläufig zwischengespeichert werden, da erst nach Vergleich mit dem folgenden Satz feststellbar ist, ob es sich um ein Unikat handelt. Dieser Vergleich müsste für jeden geschriebenen Satz durchgeführt werden, um auch mehrere aufeinanderfolgende zusätzliche Links als "neu" zu identifizieren.VerlinkteDateienNeu = Alle neuen Dateien, weil mehr Links vorhanden waren; zum besseren Überblick.
Anstelle des Schreibens in "GesamtLinkNamen" im Teil nachIf Not fso.FileExists(sDateiMitPfad) Then 'existiert die Datei noch nicht, ...
GesamtLinkNamen = Alle vorhandenen LinkNamen zur eventuellen Weiterverarbeitung.
Unmittelbar nach dem Schreiben der vollständigen Link-Zeile mitoEndergebnis.WriteLine ...
Die LinkNameNeu Datei ist nur noch 4kb größer als GesamtLinkNamen Datei, was ja auch auf das andere Format zurückzuführen sein könnte
Eigentlich müsstest Du ja nur die Zeilenanzahl vergleichen ...Grüße
bastla
Hallo Fraenky!
Dein Macromedia-Editor kann doch sicher Zeilennummern anzeigen ...
funktionieren.
Grüße
bastla
Vielleicht hast Du beim flüchtigen Lesen übersehen ,das ich an dieser Stelle zwei Anweisungen eingesetzt hatte.
Das nicht, aber ich hatte auf Deine Eigeninitiative gesetzt ... Eigentlich müsstest Du ja nur die Zeilenanzahl vergleichen ...
Ja klar, aber ein Zähler ist ja noch nicht eingebaut und mit den kopierten Originaldaten nicht feststellbar ...... das Feld ("LinkName") liefert das Format SonderLink, ich brauche aber Format Sonder.
Hatten wir nicht Functions zum Konvertieren in alle Richtungen? Eigentlich sollteoGesammtLinkNamen.WriteLine SonderLinkSonderKonvert(LinkDat.Fields.Item("LinkName"))
Grüße
bastla
Hallo Fraenky!
icountero = Anzahl (geschriebener) Links
Du machst durch die umgebenden Anführungszeichen aus den beiden Teilen einen einzigen String. Richtig wäre es so:
Ganz richtig wäre es, nur Strings miteinander zu verketten, und daher vorweg die Zahl "icountern" in einen String umzuwandeln:
Grüße
bastla
Kann ich also icountera als Gesammtanzahl der Links nehmen?
icountera = Anzahl Einträge (also inkl. Duplikate) in der Datenbank (müsste demnach am Ende dem Wert von LinkDat.RecordCount entsprechen)icountero = Anzahl (geschriebener) Links
Brauche die Anzahl, um sie später durch Anzahl Ordner teilen zu können.
Es hat IMO eigentlich wenig Sinn, vorweg die Anzahl der Ordner zu berechnen oder die entsprechenden Ordner sogar zu erstellen - einfacher ist es, einen Ordner zu befüllen, und sobald dieser die vorgegebene Anzahl an Dateien enthält, den nächsten Ordner zu erstellen und zu befüllen, bis alle Dateien aufgeteilt sind.'WScript.Echo "icountern & neue Links" Warum funktioniert die Ausgabe so nicht?
WScript.Echo icountern & " neue Links"
WScript.Echo CStr(icountern) & " neue Links"
Grüße
bastla
Hallo Fraenky!
(Verständnis-)Fragen:
Wenn der Ordnername aus der ersten Zeile der Datei "ListeNamenOrdner" gelesen wird, so ist nur dieser eine Ordner zu erstellen und alle Dateien sind in diesen Ordner zu legen (ohne Aufteilung)? Oder soll der eingelesene Ordnername als Präfix für die laufende Nummer dienen und dennoch eine Aufteilung der Dateien vorgenommen werden?
Was soll in die Protokolldatei eingetragen werden - Vollständiger Link mit URL = Pfad/DateinameOderNummer.php und Linktext = Originaldateiname?
Grüße
bastla
(Verständnis-)Fragen:
Wenn der Ordnername aus der ersten Zeile der Datei "ListeNamenOrdner" gelesen wird, so ist nur dieser eine Ordner zu erstellen und alle Dateien sind in diesen Ordner zu legen (ohne Aufteilung)? Oder soll der eingelesene Ordnername als Präfix für die laufende Nummer dienen und dennoch eine Aufteilung der Dateien vorgenommen werden?
Istzustand: Arbeitsordner/1/Test.php
Link in ProtokollNewNameLinklist: 1/Test.php
Link in Datei 1.php: 1/Test.php
Beispiel: In Datei sPath/1/1 Liegt "PfadInDat"/!/1.php in oder "PfadInDat"/OrdnerName/LinkName.php
Der einzugebende Pfad ("PfadInDat") wird zusammen mit dem Originaldateinamen in die neue Datei geschrieben (unabhängig davon, ob die Datei als Namen eine laufende Nummer erhält oder den Originalnamen trägt)?Link in ProtokollNewNameLinklist: 1/Test.php
Link in Datei 1.php: 1/Test.php
Beispiel: In Datei sPath/1/1 Liegt "PfadInDat"/!/1.php in oder "PfadInDat"/OrdnerName/LinkName.php
Was soll in die Protokolldatei eingetragen werden - Vollständiger Link mit URL = Pfad/DateinameOderNummer.php und Linktext = Originaldateiname?
Grüße
bastla
Hallo Fraenky!
Da es momentan für mich etwas schwierig ist, konzentriert an der Fertigstellung zu arbeiten, muss ich das Testen des folgenden Entwurfes Dir überlassen:
Grüße
bastla
[Edit] Fehler bei Überprüfung auf bereits betehenden Zielordner korrigiert. [/Edit]
Da es momentan für mich etwas schwierig ist, konzentriert an der Fertigstellung zu arbeiten, muss ich das Testen des folgenden Entwurfes Dir überlassen:
ProtokollNewDat = "C:\Skripts\ProtokollNewDat.txt"
If MsgBox("Linkliste aufteilen?", vbYesNo) <> vbYes Then WScript.Quit
ADO = InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd")
Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat")
PfadSonder = SonderDatConvert(Pfad) 'neuen Pfad konvertieren (wird oft benötigt, daher einmalige Umwandlung hier)
If Not fso.FolderExists(sPath & "\" & Pfad) Then fso.CreateFolder(sPath & "\" & Pfad) 'Pfad erstellen
'If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then Then OFN = True
OFN = True 'vorläufig nur Nummerierung implementiert
'If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True
DFN = True 'vorläufig nur Nummerierung implementiert
Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True) 'Protokolldatei für die neuen Dateien öffnen
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForReading) 'fertige Liste wieder einlesen
iONr = 0 'Ordnernummer initialisieren
iDNr = 0 'Dateinummer initialisieren
iDinO = ADO 'Zähler "Dateien in Ordner" so setzen, dass sofort ein Ordner erstellt werden muss
Do While Not oEndergebnis.AtEndOfStream
iDNr = iDNr + 1 'Dateinummer erhöhen
iDinO = iDinO + 1 'Zähler "Dateien in Ordner" erhöhen
If iDinO > ADO Then 'Ordner voll
iDinO = 1 'Zähler "Dateien in Ordner" zurücksetzen
If OFN Then 'nummerierte Ordner verwenden
iONr = iONr + 1 'Ordnernummer erhöhen ...
sOrdner = CStr(iONr) '... und als Namen des nächsten Ordners festlegen
Else
'Ordnername aus Liste - nicht implementiert
End If
If Not fso.FolderExists(sPath & "\" Pfad & "\" & sOrdner) Then
fso.CreateFolder(sPath & "\" Pfad & "\" & sOrdner) 'Nächsten Ordner erstellen
End If
End If
aZeile = Split(oEndergebnis.ReadLine, """") 'Linkzeile einlesen und aufteilen
If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden
If InStr(aZeile(2), "<") >= 2 Then 'Link-Text sollte OK sein
sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"
sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"
If aZeile(1) <> "" Or sText <> "" Then
sURL = PfadSonder & "/" & sOrdner& "/" & Mid(aZeile(1), InStrRev(aZeile(1), "\") + 1)
'oder: sURL = PfadSonder & "/" & Mid(aZeile(1), InStrRev(aZeile(1), "\") + 1)
sDatName = CStr(iDNr) & ".php"
sDatPfad = sPath & "\" & Pfad & "\" & sOrdner & "\" & sDatName
fso.OpenTextFile(sDatPfad, ForWriting, True). _
Write "<a href=""" & sURL & """>" & sText & "</a>" 'Datei erstellen und Link gleich eintragen
oProtokollNewDat.WriteLine PfadSonder & "/" & sOrdner & "/" & sDatName
End If
End If
End If
Loop
oEndergebnis.Close
oProtokollNewDat.Close
Grüße
bastla
[Edit] Fehler bei Überprüfung auf bereits betehenden Zielordner korrigiert. [/Edit]
Hallo Fraenky!
Die entsprechende Zeile ist zwar jetzt oben bereits korrigiert, die restlichen Änderungen folgen aber erst später.
Grüße
bastla
... einen Kompilierungsfehler auswirft.
In diesem Fall war es (da der Fehler ganz offensichtlich war) nicht notwendig, die Fehlermeldung exakt anzugeben - ansonsten hilft dies uU entscheidend weiter ...Die entsprechende Zeile ist zwar jetzt oben bereits korrigiert, die restlichen Änderungen folgen aber erst später.
Grüße
bastla
Hallo Fraenky!
Nächster Versuch ...
Grüße
bastla
Nächster Versuch ...
Nur diese reine Internetadresse soll in der neu erstellten Datei liegen.
Also keine Tags? Falls dem so sein sollte, kannst Du das Einfügen der Tags ja sicher selbst aus dem Code entfernen.ProtokollNewDat = "C:\Skripts\ProtokollNewDat.txt"
If MsgBox("Linkliste aufteilen?", vbYesNo) <> vbYes Then WScript.Quit
ADO = InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd")
Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat")
'If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then Then OFN = True
OFN = True 'vorläufig nur Nummerierung implementiert
'If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True
DFN = True 'vorläufig nur Nummerierung implementiert
Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True) 'Protokolldatei für die neuen Dateien öffnen
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForReading) 'fertige Liste wieder einlesen
iONr = 0 'Ordnernummer initialisieren
iDNr = 0 'Dateinummer initialisieren
iDinO = ADO 'Zähler "Dateien in Ordner" so setzen, dass sofort ein Ordner erstellt werden muss
Do While Not oEndergebnis.AtEndOfStream
iDNr = iDNr + 1 'Dateinummer erhöhen
iDinO = iDinO + 1 'Zähler "Dateien in Ordner" erhöhen
If iDinO > ADO Then 'Ordner voll
iDinO = 1 'Zähler "Dateien in Ordner" zurücksetzen
If OFN Then 'nummerierte Ordner verwenden
iONr = iONr + 1 'Ordnernummer erhöhen ...
sOrdner = CStr(iONr) '... und als Namen des nächsten Ordners festlegen
Else
'Ordnername aus Liste - nicht implementiert
End If
If Not fso.FolderExists(sPath & "\" & sOrdner) Then
fso.CreateFolder(sPath & "\" & sOrdner) 'Nächsten Ordner erstellen
End If
End If
aZeile = Split(oEndergebnis.ReadLine, """") 'Linkzeile einlesen und aufteilen
If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden
If InStr(aZeile(2), "<") >= 2 Then 'Link-Text sollte OK sein
sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"
sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"
If aZeile(1) <> "" Or sText <> "" Then
sURL = Pfad & "/" & SonderLinkSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "\") + 1))
sDatName = CStr(iDNr) & ".php"
sDatPfad = sPath & "\" & sOrdner & "\" & sDatName
fso.OpenTextFile(sDatPfad, ForWriting, True). _
Write "<a href=""" & sURL & """>" & sText & "</a>" 'Datei erstellen und Link gleich eintragen
oProtokollNewDat.WriteLine PfadSonder & "/" & sOrdner & "/" & sDatName
End If
End If
End If
Loop
oEndergebnis.Close
oProtokollNewDat.Close
Grüße
bastla
Hallo Fraenky!
Versuch es mit dieser Version:
Grüße
bastla
Versuch es mit dieser Version:
ProtokollNewDat = "C:\Skripts\ProtokollNewDat.txt"
If MsgBox("Linkliste aufteilen?", vbYesNo) <> vbYes Then WScript.Quit
ADO = CInt(InputBox("Geben Sie die Anzahl der Dateien pro Ordner an", "AnzDatOrd"))
If ADO <= 0 Then WScript.Quit
Pfad = InputBox("Geben Sie den Pfad an", "PfadInDat")
'If MsgBox("Ordner fortlaufend Nummerieren(Ja) oder Namen(Nein) aus ListeNamenOrdner.txt einlesen?", vbYesNo) = vbYes Then Then OFN = True
OFN = True 'vorläufig nur Nummerierung implementiert
'If MsgBox("Dateien fortlaufend Nummerieren(Ja) oder Namen(Nein) aus LinkNamen erstellen?", vbYesNo) = vbYes Then DFN = True
DFN = True 'vorläufig nur Nummerierung implementiert
Set oProtokollNewDat = fso.OpenTextFile(ProtokollNewDat, ForWriting, True) 'Protokolldatei für die neuen Dateien öffnen
Set oEndergebnis = fso.OpenTextFile(Endergebnis, ForReading) 'fertige Liste wieder einlesen
iONr = 0 'Ordnernummer initialisieren
iDNr = 0 'Dateinummer initialisieren
iDinO = ADO 'Zähler "Dateien in Ordner" so setzen, dass sofort ein Ordner erstellt werden muss
Do While Not oEndergebnis.AtEndOfStream
iDNr = iDNr + 1 'Dateinummer erhöhen
iDinO = iDinO + 1 'Zähler "Dateien in Ordner" erhöhen
If iDinO > ADO Then 'Ordner voll
iDinO = 1 'Zähler "Dateien in Ordner" zurücksetzen
If OFN Then 'nummerierte Ordner verwenden
iONr = iONr + 1 'Ordnernummer erhöhen ...
sOrdner = CStr(iONr) '... und als Namen des nächsten Ordners festlegen
Else
'Ordnername aus Liste - nicht implementiert
End If
If Not fso.FolderExists(sPath & "\" & sOrdner) Then
fso.CreateFolder(sPath & "\" & sOrdner) 'Nächsten Ordner erstellen
End If
End If
aZeile = Split(oEndergebnis.ReadLine, """") 'Linkzeile einlesen und aufteilen
If UBound(aZeile) = 2 Then '2 Anführungszeichen gefunden
If InStr(aZeile(2), "<") >= 2 Then 'Link-Text sollte OK sein
sText = Left(aZeile(2), InStr(aZeile(2), "<") - 1) 'bis zum ersten "<"
sText = Mid(sText, InStrRev(sText, ">") + 1) 'ab dem letzten ">"
If aZeile(1) <> "" Or sText <> "" Then
sURL = Pfad & "/" & SonderLinkSonderKonvert(Mid(aZeile(1), InStrRev(aZeile(1), "/") + 1))
sDatName = CStr(iDNr) & ".php"
sDatPfad = sPath & "\" & sOrdner & "\" & sDatName
fso.OpenTextFile(sDatPfad, ForWriting, True). _
Write "<a href=""" & sURL & """>" & sText & "</a>" 'Datei erstellen und Link gleich eintragen
'Write sURL 'Version ohne Tags/Linkschreibweise
oProtokollNewDat.WriteLine Pfad & "/" & sOrdner & "/" & sDatName
End If
End If
End If
Loop
oEndergebnis.Close
oProtokollNewDat.Close
Grüße
bastla
Hallo Fraenky!
Grüße
bastla
... läuft das Script und macht, was es sollte.
... dann könntest Du ja den Beitrag Wie kann ich einen Beitrag als gelöst markieren? ...Grüße
bastla