Zum Inhalt springen

VBS neuste Datei in einem Unterordner kopieren und umbennen


Empfohlene Beiträge

Geschrieben

Hallo zusammen,

eigentlich beschreibt der Titel meine Frage schon.

In einem Ordner befinden sich verschiedene Dateien.

Nun muss ich gucken welche Datei die neuste ist (Erstelldatum) und dann verschieben und umbennen.

Dim fso, f, strDateCreated

Set fso = CreateObject("Scripting.FileSystemObject")

Set f = fso.GetFile("C:\temp\xxxx\an.bat")

strDateCreated = f.DateCreated

MSGBOX strDateCreated

Das ist der Code, so krieg ich zumindest schon mal das Erstelldatum einer einzigen Datei raus. Das Problem ist jetzt aber das ich nicht den ganzen Ordner durchsuchen kann sondern nur eine Datei. Zum anderen gibt es in diesem Ordner 2 Arten von Dateien.. Einmal xy(dann irgendeine Zahl) und einmal ab(dann irgendeine zahl). Ich soll jedes mal für beide art die neuste Datei finden.

ich hoffe ihr könnt mir helfen, kleine Vorwahnung.. Hab wirklich kaum eine Ahnung von VBS. Alles aus dem Internet zusammen gesucht.

DANKE

Gruß

Gast Kreakworld
Geschrieben

is doch super wenn du das schon hinbekommen hast. jetzt ließt du dir den Ordnerinhalt komplett ein, schreibst dir die werte in ein Array, und gehst dann in einer schleife durch, welches das jüngste ist, wenn ja, dann überschreib es mit der variablen ab_newest und xy_newest. ob ab oder xy musst du einfach vorher überprüfen mit einer if-abfrage.

den schweren teil hasst du schon hinter dir.

gruß,

kre4k

Geschrieben

Morgen zusammen,

vielen Dank erstmal für eure Hilfen!

@Kreakworld: Ja genauso hatte ich es vor, das Problem ist nur, das ich einfach die Syntax noch nicht von VBS kenne und dadurch nicht weiß wie ich die if-schleife aufbauen muss (generell schon aber mich irritiert VBS sehr weil irgendwie überall steht "As" oder so...:old:confused:

@Amstelchen: Leider weiß ich nicht wie ich den Code bei Microsoft verändern müsste damit er für mich funktioniert.

was heißt folgendes?


 For Each f1 in fc

      s = s & f1.name 

      s = s & "<BR>"

   Next

   ShowFolderList = s

Gast Kreakworld
Geschrieben

also als erstes

keine if-schleifen.

dann bleibt dir aber nichts anderes übrig als dich ein bisschen durch google zu fressen um dir die syntax raus zu suchen. Ich weiss selbst nicht genau wie was wo geschieben wird. Ich kann mich erinnern, dass eine Ende der Anweisung einfach ein Enter ist.

kein Symikolon! ich hasse das..

ich programmiere nicht ständig und springe auch oft. (neulich wieder mit php ne Navigationsmenu für ne Webpage aufgebaut).

Gelernt habe ich programmieren mit C#

in Java hab ich 2 Projekte bearbeitet.

Privat mach ich vor allem PHP.

und mit Perl nervt mich mein Bruder immer :)

mit VB quäle ich mich nur wenn ich mit Excel oder Access normal nicht weiterkomme.

Ich will damit nur sagen:

Syntax merken ist überflüssig. Man sollte nur die logik und herangehensweise des Programmierens verstehen... dann gehen alle sprachen mit ein paar minuten Google von selbst!

Gruß

kre4k

Geschrieben

wieso jetzt doch keine if-schleife?

Ohja das mit dem semikolon kenn ich. Ich hab auch C gelernt. Aber jetzt will mein jetziger Teamleiter das ich in VBS scripte. Da hab ich so meine Probleme mit :hells:

naja btt...

wie soll ich es dann machen, wenn nicht per if-schleife? Mein Plan sieht so aus:

- Dateien in 2 Arrays sotieren nach ab_dateien und xy_datieien...

- in diesen 2 Arrays jeweils die neuste Datei suchen

- datei in variable schreiben (ab_newest bzw. xy_newest)

- datei verschieben...

Set objFSO = CreateObject("Scripting.FileSystemObject")

'objFSO.MoveFile "C:\temp\quelle\" , s"C:\temp\ziele\"

code zum Verschieben und umbennen (funktioniert wie gewünscht!)

Bitte um Tipps wie ich das Verwirklicheh kann :)

Geschrieben

Um die Meta-Diskussion abzukürzen:

wieso jetzt doch keine if-schleife?
Der Begriff "If-Schleife" ist Unsinn, weil die if-Anweisung eine Verzweigung einleitet, keine Schleife. Schleife bedeutet Wiederholung. Bei if wird nichts wiederholt.

Das heißt nicht, dass du kein if benutzen sollst.

Geschrieben

es ist völlig egal, in welchen sprachen du bisher gearbeitet hast: verstehe das prinzip, wie eine iteration durch eine dateiliste (Folder) funktioniert.

im übrigen hast du genau das in dem von mir angegeben link schon vorgegeben. du musst nurmehr die kopier-/verschiebefunktion genau dort einbauen.

ich verstehe auch nicht wirklich, warum du mit irgendwelchen arrays herumtun willst, wenn du die datei nur verschieben/umbenennen (welches im übrigen so ziemlich dasselbe is) willst.

s'Amstel

Geschrieben

ich habe mir gedacht es wäre einfacher mit 2 Arrays zu arbeiten um die 2 typen der dateien zu unterscheiden...

Wenn ihr aber ne bessere Idee hättet um 2 verschiedene Datei"typen" zu unterscheiden und jeweils die neuste Datei zu finden. Würd mich freuen^^

Weil zur Zeit steh ich wirklich auf dem Schlauch!

Geschrieben
ich habe mir gedacht es wäre einfacher mit 2 Arrays zu arbeiten um die 2 typen der dateien zu unterscheiden...

Du brauchst keine Arrays, wenn es dir nur darum geht, ein Minimum oder Maximum zu finden.

Dazu musst du dir nur den kleinsten/größten bisher gefundenen Eintrag merken.

Beispiel:

Wenn du die längste Nummer in einem Telefonbuch wissen willst, schreibst du dann das komplette Telefonbuch ab, sortierst es nach Nummernlänge und schaust dir den letzten Eintrag an?

Oder schaust du dir jede Nummer an, und wenn sie länger ist als die längste, die du bisher gefunden hast, vergisst du die alte und merkst dir die neue?

Was ist einfacher? ;)

Geschrieben

ja okay das hört sich logisch an.

aber wenn ich 2 telefonnummern haben will einmal die längste telefonnummer mit einem J am Anfang des Hausnamens und einmal mit einem A. Dann muss ich doch erst alle überprüfen und dann in 2 Tabellen schreiben. Einmal in eine Tabelle mit alles J Namen und die Länge (dann hat man die Längste Nummer (Ziel 1 wurde erreicht)) und in eine alle Nummer mit A im Namen (Ziel 2 erreicht)

Wahrscheinlich verharre ich mich da einfach, aber so klingt es irgendwie logisch für mich. Dein Vorschlag würd nur funktionieren wenn ich nur eine Nummer haben möchte. Weil es kann ja auch sein, dass die längste Nummer (also ganz oben) gleich eine mit einem Namen J ist. Und die mit A?

Geschrieben
Dein Vorschlag würd nur funktionieren wenn ich nur eine Nummer haben möchte. Weil es kann ja auch sein, dass die längste Nummer (also ganz oben) gleich eine mit einem Namen J ist. Und die mit A?

Dann musst du dir einfach nur zwei bisher gefundene längste Nummern merken, eine für A und eine für J.

Du schaust dir jede Nummer an. Fängt der Name mit A an, vergleichst du sie mit deiner längsten bisher gefundenen A-Nummer, und ersetzt sie gegebenenfalls. Fängt der Name mit J an, vergleichst du sie mit deiner längsten bisher gefundenen J-Nummer, und ersetzt diese gegebenenfalls. Fängt der Name weder mit A noch mit J an, gehst du zur nächsten Nummer.

Das kannst du 1:1 auf dein Dateiproblem übertragen.

Geschrieben

ja genauso will ich es machen.. aber ich weiß nicht wie ich das machen kann das ich die datei in einer variable speicher und und dann vergleiche? Codebeispiel?^^

Geschrieben
ja genauso will ich es machen.. aber ich weiß nicht wie ich das machen kann das ich die datei in einer variable speicher und und dann vergleiche?
Du kannst nicht die Datei selbst speichern. Du musst die Eigenschaften der Datei speichern, die hier relevant sind: Den Namen (denn den brauchst du am Ende) und das Erstelldatum (das musst du vergleichen, um zu entscheiden, ob du beide ersetzen musst). Insgesamt also 4 Variablen.
Geschrieben (bearbeitet)

Dim fso, f, strDateCreated,g, strDateCreated1

Set fso = CreateObject("Scripting.FileSystemObject")

Set f = fso.GetFile("C:\temp\an.bat")

strDateCreated = f.DateCreated

MSGBOX strDateCreated


Set fso = CreateObject("Scripting.FileSystemObject")

Set g= fso.GetFile("C:\temp\e-mail.vbs")

strDateCreated1= g.DateCreated

MSGBOX strDateCreated1


if(strDateCreated>strDateCreated1) Then

strDateCreated1=strDateCreated

End if


MSGBOX strDateCreated

soo.. jetzt vergleich ich diese 2 Dateien. Muss sie halt am Anfang angeben, weil ich bisher noch nicht weiß wie ich im Sag das sie einen bestimmt Typ haben müssen.

Bearbeitet von M4tRiX
Geschrieben

So hab nun dieses Problem gelöst.

Hab einfach per if-abfrage geklärt welche datei es ist...

Nun hänge ich aber bei dem Auslesen einer XML-Datei. Ich muss in der XML-Datei einen bestimmt Tag auslesen und diesen in einer anderen Datei speichern. Kennt ihr euch damit aus? Bzw. könnt ihr mir Schlagwörter dafür nennen?

Geschrieben

Morgen zusammen,

könntet ihr mir bitte noch sagen was an folger Zeile falsch ist?

objFSO.MoveFile objFile.Path & "\" objFile.Name, cDestination & "\" & strFile

Fehler: Anweisungsende erwartet

Code: 800A0401

Danke...

Geschrieben

Danke Eratum!!

Jetzt funktioniert das ;)

Aber jetzt ist der nächste Fehler aufgetaucht...

Code: 800A000D

Fehler: Typen unverträglich: 'lcas'

if left(lcas(objFile.Name),12) = "aaaaaaaaaaa_" or left(lcas(objFile.Name),9) = "bbbbbbbb_" then

Sry, aber ich weiß einfach nicht wo der Fehler ist. lcas soll doch eigentlich heißen das alles klein geschrieben wird. oder? Hab den Befehl aus dem Internet gefunden...

Geschrieben (bearbeitet)

edited:

oha...stuss geschrieben :-)

Neuer Versuch:

Schau dir mal deinen lcase-Befehl genauer an...

Erratum

P.s.: Hab immer www.asphelper.de als Kurzreferenz genutzt. Da solltest dud as Grundlegendste auch zu VBS finden...

Bearbeitet von Eratum
Geschrieben (bearbeitet)

Soo jetzt bin ich beim nächsten problem gelandet..

kann man der Funktion CODE]xmlDoc.Load("")[

Das heißt das sieht dann so aus:

xmlDoc.Load(""& objFile.Name)
Dort kommt jedoch immer folgender Fehler: Code: 800A0046 Fehler: Erlaubnisverweigert wenn ich jedoch den pfad angebe:
xmlDoc.Load("C:\temp\test.xml")

funktioniert es einwandfrei. Es muss aber i-wie variabel sein.

eine Variable mitgeben?

Bearbeitet von M4tRiX
Geschrieben

Dieser text wird ja gespeichert.. und mit

""&
möcht ich erreichen, dass die Variable rein geschrieben wird... z.B. wie hier:
objLogFile.WriteLine("File found: " & objFile.Name

Irrsinn`?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...