VBSkript umschreiben, um eine Datei zu kopieren (absoluter Anfänger!)
Hallo zusammen,
ich bin heute von meinem Chef im Praktikum ins kalte Wasser geschmissen worden und soll so schnell wie möglich eine .vbs-Datei umschreiben (bzw. neu erstellen, aber das kann ich erst recht nicht). Die alte Datei existiert und sieht wie folgt aus:
'v4.7
' File: ed-sichern.vbs
'
'Option Explicit
Dim fso, Datei
Dim Dateiquelle, Pfadneu, Pfadtest, Dateiziel, ZielVerz, Verzeichnis
Dim nCount
Dim oFSO
Dim oFolder
Set ofso = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder("F:\eDonkey down")
' Anzahl Dateien im Stammverzeichnis von C:
nCount = oFolder.Files.Count
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
'#########################################################################################
' Ausgangsverzeichnis ########### anpassen auf das ED-Verzeichnis ########################
Set Verzeichnis = FSO.GetFolder("F:\eDonkey down")
'#########################################################################################
'##########################################################################################
'Zielverzeichnis' ################# anpassen auf das Zielverzeichnis ######################
Pfadneu = "F:\save\" & Datumzeit & "\"
'##########################################################################################
fso.createfolder(Pfadneu)
Set Zielverz = FSO.Getfolder(Pfadneu)'Set Zielverz = FSO.Getfolder(Pfadtest)
For Each Datei In Verzeichnis.Files
on error resume next
Set DateiQuelle = fso.GetFile(Datei)
fso.moveFile DateiQuelle, Zielverz & "\"
Next
WScript.Quit
'
Function DatumZeit
'
' gibt ein Zeichenfolge zurück, die Datum / Zeit enthält
' und als Dateiname / Verzeichnisnae verwendet werden kann
Dim Zeit
Zeit = now()
' zweistellige Jahreszahl
DatumZeit = Right(Year(Zeit),2)
' zweistellige Monatszahl
If Len(Month(Zeit)) = 1 then DatumZeit = DatumZeit & "-0" & Month(Zeit)
If not Len(Month(Zeit)) = 1 then DatumZeit = DatumZeit & "-" & Month(Zeit)
' zweistellige Tageszahl
If Len(Day(Zeit)) = 1 then DatumZeit = DatumZeit & "-0" & Day(Zeit)
If not Len(Day(Zeit)) = 1 then DatumZeit = DatumZeit & "-" & Day(Zeit)
' zweistellige Stundezahl
If Len(Hour(Zeit)) = 1 then DatumZeit = DatumZeit & "_0" & Hour(Zeit)
If not Len(Hour(Zeit)) = 1 then DatumZeit = DatumZeit & "_" & Hour(Zeit)
' zweistellige Minutenzahl
If Len(Minute(Zeit)) = 1 then DatumZeit = DatumZeit & "'0" & Minute(Zeit)
If not Len(Minute(Zeit)) = 1 then DatumZeit = DatumZeit & "'" & Minute(Zeit)
' zweistellige Sekundenzahl
If Len(Second(Zeit)) = 1 then DatumZeit = DatumZeit & "'0" & Second(Zeit)
If not Len(Second(Zeit)) = 1 then DatumZeit = DatumZeit & "'" & Second(Zeit)
End Function ' DatumZeit
' **
Allerdings funktioniert sie nicht, obwohl die Verzeichnisse existieren. Ich bin jetzt gerade mal so weit gekommen, dass ich verstanden habe, dass die Zeilen, an deren Anfang ein ' steht, Kommentare sind. Ich habe noch nie mit VB gearbeitet und auch sonst von Programmierung keine Ahnung.
Es wird jetzt gewünscht, dass eine Datei "D:\draw\test.jpg" (als Beispiel) in ein Unterverzeichnis "D:\draw\backup" kopiert wird und zwar als "test_datumzeit.jpg", wobei datumzeit aktuelle Werte sein sollen. Angeblich ist das ganz einfach, aber bis jetzt hat meine Recherche im Internet bzw. auch in einem Buch mich nicht wirklich weitergebracht. Ich habe gehofft, dass hier evtl. jemand ist, für den das Ganze kein Problem darstellt. Am besten wäre natürlich, wenn er dabei noch ein bisschen erklären könnte, aber wenn ich erst mal einen Lösungsvorschlag hätte, würde mir das auch schon weiterhelfen. Der Unterschied ist ja erstens mal, dass das Ding da oben einen Ordner kopiert und keine Datei. Aber ich weiß wirklich nicht, wo ich da eingreifen soll.
Danke schon mal im Voraus!
Nina
ich bin heute von meinem Chef im Praktikum ins kalte Wasser geschmissen worden und soll so schnell wie möglich eine .vbs-Datei umschreiben (bzw. neu erstellen, aber das kann ich erst recht nicht). Die alte Datei existiert und sieht wie folgt aus:
'v4.7
' File: ed-sichern.vbs
'
'Option Explicit
Dim fso, Datei
Dim Dateiquelle, Pfadneu, Pfadtest, Dateiziel, ZielVerz, Verzeichnis
Dim nCount
Dim oFSO
Dim oFolder
Set ofso = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder("F:\eDonkey down")
' Anzahl Dateien im Stammverzeichnis von C:
nCount = oFolder.Files.Count
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
'#########################################################################################
' Ausgangsverzeichnis ########### anpassen auf das ED-Verzeichnis ########################
Set Verzeichnis = FSO.GetFolder("F:\eDonkey down")
'#########################################################################################
'##########################################################################################
'Zielverzeichnis' ################# anpassen auf das Zielverzeichnis ######################
Pfadneu = "F:\save\" & Datumzeit & "\"
'##########################################################################################
fso.createfolder(Pfadneu)
Set Zielverz = FSO.Getfolder(Pfadneu)'Set Zielverz = FSO.Getfolder(Pfadtest)
For Each Datei In Verzeichnis.Files
on error resume next
Set DateiQuelle = fso.GetFile(Datei)
fso.moveFile DateiQuelle, Zielverz & "\"
Next
WScript.Quit
'
Function DatumZeit
'
' gibt ein Zeichenfolge zurück, die Datum / Zeit enthält
' und als Dateiname / Verzeichnisnae verwendet werden kann
Dim Zeit
Zeit = now()
' zweistellige Jahreszahl
DatumZeit = Right(Year(Zeit),2)
' zweistellige Monatszahl
If Len(Month(Zeit)) = 1 then DatumZeit = DatumZeit & "-0" & Month(Zeit)
If not Len(Month(Zeit)) = 1 then DatumZeit = DatumZeit & "-" & Month(Zeit)
' zweistellige Tageszahl
If Len(Day(Zeit)) = 1 then DatumZeit = DatumZeit & "-0" & Day(Zeit)
If not Len(Day(Zeit)) = 1 then DatumZeit = DatumZeit & "-" & Day(Zeit)
' zweistellige Stundezahl
If Len(Hour(Zeit)) = 1 then DatumZeit = DatumZeit & "_0" & Hour(Zeit)
If not Len(Hour(Zeit)) = 1 then DatumZeit = DatumZeit & "_" & Hour(Zeit)
' zweistellige Minutenzahl
If Len(Minute(Zeit)) = 1 then DatumZeit = DatumZeit & "'0" & Minute(Zeit)
If not Len(Minute(Zeit)) = 1 then DatumZeit = DatumZeit & "'" & Minute(Zeit)
' zweistellige Sekundenzahl
If Len(Second(Zeit)) = 1 then DatumZeit = DatumZeit & "'0" & Second(Zeit)
If not Len(Second(Zeit)) = 1 then DatumZeit = DatumZeit & "'" & Second(Zeit)
End Function ' DatumZeit
' **
Allerdings funktioniert sie nicht, obwohl die Verzeichnisse existieren. Ich bin jetzt gerade mal so weit gekommen, dass ich verstanden habe, dass die Zeilen, an deren Anfang ein ' steht, Kommentare sind. Ich habe noch nie mit VB gearbeitet und auch sonst von Programmierung keine Ahnung.
Es wird jetzt gewünscht, dass eine Datei "D:\draw\test.jpg" (als Beispiel) in ein Unterverzeichnis "D:\draw\backup" kopiert wird und zwar als "test_datumzeit.jpg", wobei datumzeit aktuelle Werte sein sollen. Angeblich ist das ganz einfach, aber bis jetzt hat meine Recherche im Internet bzw. auch in einem Buch mich nicht wirklich weitergebracht. Ich habe gehofft, dass hier evtl. jemand ist, für den das Ganze kein Problem darstellt. Am besten wäre natürlich, wenn er dabei noch ein bisschen erklären könnte, aber wenn ich erst mal einen Lösungsvorschlag hätte, würde mir das auch schon weiterhelfen. Der Unterschied ist ja erstens mal, dass das Ding da oben einen Ordner kopiert und keine Datei. Aber ich weiß wirklich nicht, wo ich da eingreifen soll.
Danke schon mal im Voraus!
Nina
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 39707
Url: https://administrator.de/forum/vbskript-umschreiben-um-eine-datei-zu-kopieren-absoluter-anfaenger-39707.html
Ausgedruckt am: 05.04.2025 um 05:04 Uhr
4 Kommentare
Neuester Kommentar
Moin Nina1985,
willkommen im Forum.
Wichtigste Regel beim Programmieren:
Erstmal die Tastatur aus der Hand legen und sortieren.
Wo will ich hin, was hab ich an Informationen, welche brauche ich noch, welche kann ich mir schrittweise besorgen?
Du hast schon ganz gut angefangen:
Unsortierte Informationen/Hoffnungen/Vermutungen/Wünsche:
So, jetzt lass uns da mal die Luft aus dem Käse drücken, die Vermutungen rausstreichen und dafür ein paar Rückfragen machen:
Welche Infos muss das Programm bekommen, um eine Datei von A nach B zu kopieren?
Muss ich vorsehen, dass auch alle *.mp3-Dateien kopiert werden sollen oder ist es IMMER exakt eine?
Was soll passieren, wenn die Quelldatei nicht gefunden wird?
Was, wenn es den Zielordner nicht gibt?
Was, wenn die Zieldatei schon vorhanden ist?
Was, wenn die nicht auf das Laufwerk passt?
Fehler auf den Bildschirm? Oder in eine Logdatei?
Und Erfolgsmeldungen?
Angeblich ist das ganz einfach, aber bis jetzt hat meine Recherche im Internet bzw. auch in einem Buch mich nicht
wirklich weitergebracht. Ich habe gehofft, dass hier evtl. jemand ist, für den das Ganze kein Problem darstellt.
Du siehst, das Programm nimmt schon bei diesen Vorüberlegungen Gestalt an, ohne dass Du auch nur eine Zeile coden musst.
Versuch mal bitte, die Fragen zu beantworten (die Antworten musst zum Teil Du geben als Programmierer - der Kunde kann und will sich da gar nicht reindenken).
Wenn wir das "Wie soll es aussehen?" wissen, dann können wir zum Handwerklichen übergehen.
Gruß
Biber
willkommen im Forum.
Wichtigste Regel beim Programmieren:
Erstmal die Tastatur aus der Hand legen und sortieren.
Wo will ich hin, was hab ich an Informationen, welche brauche ich noch, welche kann ich mir schrittweise besorgen?
Du hast schon ganz gut angefangen:
Unsortierte Informationen/Hoffnungen/Vermutungen/Wünsche:
Es wird jetzt gewünscht, dass eine Datei "D:\draw\test.jpg" (als Beispiel) in ein >Unterverzeichnis "D:\draw\backup"
kopiert wird und zwar als "test_datumzeit.jpg", wobei datumzeit aktuelle Werte sein sollen. Angeblich ist das ganz
einfach, aber bis jetzt hat meine Recherche im Internet bzw. auch in einem Buch mich nicht wirklich weitergebracht. Ich
habe gehofft, dass hier evtl. jemand ist, für den das Ganze kein Problem darstellt.
kopiert wird und zwar als "test_datumzeit.jpg", wobei datumzeit aktuelle Werte sein sollen. Angeblich ist das ganz
einfach, aber bis jetzt hat meine Recherche im Internet bzw. auch in einem Buch mich nicht wirklich weitergebracht. Ich
habe gehofft, dass hier evtl. jemand ist, für den das Ganze kein Problem darstellt.
So, jetzt lass uns da mal die Luft aus dem Käse drücken, die Vermutungen rausstreichen und dafür ein paar Rückfragen machen:
- eine Datei "D:\draw\test.jpg" (als Beispiel) in ein >Unterverzeichnis "D:\draw\backup" kopiert wird
Wie bekommt das Programm das mit?Welche Infos muss das Programm bekommen, um eine Datei von A nach B zu kopieren?
Muss ich vorsehen, dass auch alle *.mp3-Dateien kopiert werden sollen oder ist es IMMER exakt eine?
Was soll passieren, wenn die Quelldatei nicht gefunden wird?
Was, wenn es den Zielordner nicht gibt?
Was, wenn die Zieldatei schon vorhanden ist?
Was, wenn die nicht auf das Laufwerk passt?
Fehler auf den Bildschirm? Oder in eine Logdatei?
Und Erfolgsmeldungen?
- und zwar als "test_datumzeit.jpg",
Na ja.. wie sieht denn Datumzeit aus? JJJJMMTT_hhmm? Oder mit Sekunden? Was ist sinnvoll?- wobei datumzeit aktuelle Werte sein sollen.
Was heißt "aktuell" ? Wenn ich drei Videos kopiere, sollen dann alle die Uhrzeit des Programm-Starts bekommen oder jede Datei die Uhrzeit des jeweiligen Kopie-Starts?wirklich weitergebracht. Ich habe gehofft, dass hier evtl. jemand ist, für den das Ganze kein Problem darstellt.
Du siehst, das Programm nimmt schon bei diesen Vorüberlegungen Gestalt an, ohne dass Du auch nur eine Zeile coden musst.
Versuch mal bitte, die Fragen zu beantworten (die Antworten musst zum Teil Du geben als Programmierer - der Kunde kann und will sich da gar nicht reindenken).
Wenn wir das "Wie soll es aussehen?" wissen, dann können wir zum Handwerklichen übergehen.
Gruß
Biber
Na gut, Nina,
dann tasten wir uns mal weiter heran an die Anforderung...
Ich hab mal eine erste Rohfassung zusammengeschreddert, an und mit der man/frau jetzt ein bisschen spielen und feilen könnte.
Und ich habe ein paar schöne Suchbegriffe im Source versteckt, zu denen sich viele Detailinfos finden lassen im Netz.
Insbesondere empfehle ich, die Suchmaschine Deines Vertrauens zu befragen nach "FileSystemObject Syntax" und "WScript.Arguments".
Einige andere Funktiönchen, die in Source verwendet werden, sind so banal, wie es der Funktionsname in stililiertem Englisch vermuten lässt.
Zum Beispiel solche Sachen wie Minute(), Hour() oder Left()/Right() ... dass sind halt einfache Funktionen, die es in jeder Skript- oder Programmiersprache vorgefertigt gibt. Was diese Funktionen machen, lässt sich unschwer erraten...
So, dann hast Du am Wochenende was zum Spielen...
Beispielaufruf am CMD-Prompt:
Viel Spaß
Biber
dann tasten wir uns mal weiter heran an die Anforderung...
Ich hab mal eine erste Rohfassung zusammengeschreddert, an und mit der man/frau jetzt ein bisschen spielen und feilen könnte.
Und ich habe ein paar schöne Suchbegriffe im Source versteckt, zu denen sich viele Detailinfos finden lassen im Netz.
Insbesondere empfehle ich, die Suchmaschine Deines Vertrauens zu befragen nach "FileSystemObject Syntax" und "WScript.Arguments".
Einige andere Funktiönchen, die in Source verwendet werden, sind so banal, wie es der Funktionsname in stililiertem Englisch vermuten lässt.
Zum Beispiel solche Sachen wie Minute(), Hour() oder Left()/Right() ... dass sind halt einfache Funktionen, die es in jeder Skript- oder Programmiersprache vorgefertigt gibt. Was diese Funktionen machen, lässt sich unschwer erraten...
' --------snipp copyStamped.vbs Vers. 001 (mit kleinen Fehlern!)
' !!! Aufruf zumindest beim Testen vom CMD-Prompt:
' !!! cscript //nologo copyStamped.vbs sourceFile targetFolder
' --- später auch so:
' copyStamped.vbs [lw:\path\]sourceFile targetFolder
Option Explicit 'Tippfehler vermeiden - nur deklarierte Variablen verwenden
' wir schreiben in VBSkript... also benennen wir auch Variablen englisch
' oXXX.. wenn es um Objects geht.. strYYY, wenn es um Strings geht
Dim oFSO, oFile, strFileName, strNewStampedFilename, strFldrName
' Wir brauchen 2 Parameter (sourceFile und targetFolder) zwingend-
' Sonst brauchen wir nicht anfangen- Also müssen zwei Argumente da sein.
' In VBS heißen die wscript.arguments(n) von 0 bis wscript.arguments.count
If wscript.arguments.count() < 2 then ' weniger als 2 Parameter? Dann Feierabend
wscript.echo "Fehler: Parameter fehlt. Aufruf: copyStamped [path:\]sourceFile.ext targetFolder"
wscript.quit(4) 'Raus mit Errorlevel 4 => soll bedeuten: "Parameterfehler"
end if
' "einfache" Variablentypen wie Strings und numerische Werte mit [ var=wert] zuweisen
strFileName = wscript.arguments(0) 'voller Quell-Dateiname ist Parameter 1
strFldrName = wscript.arguments(1) 'Ziel-Ordner ist in Parameter 2 übergeben
' "nicht so einfache" Variablentypen wie Objects werden mit "Set oXXX = ..." instanziert
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
If not oFSO.FileExists(strFileName) then ' existiert die angegebene Datei?
wscript.echo "Fehler: Datei " & strFileName & " nicht gefunden."
wscript.quit(2) 'Raus mit Errorlevel 2 => Soll bedeuten: Quelldatei nicht gefunden
End if
If not oFSO.FolderExists(strFldrName) then ' existiert der angegebene Zielordner?
' Anmerkung: In der Version 0.02 könne wir auch den Zielordner bei Bedarf anlegen
' dann würde jetzt folgen: oFSO.CreateFolder(strFldrName) ... heben wir auf für später
' jetzt behaupten wir: Zielordner MUSS da sein.
wscript.echo "Fehler: Zielordner " & strFldrName & " nicht gefunden."
wscript.quit(2) 'Raus mit Errorlevel 3 => Soll bedeuten: Zielordner nicht gefunden
End if
Set oFile=oFSO.GetFile(strFileName)
strNewStampedFileName = oFSO.GetBaseName(strFilename) & "_" & DatumZeit & right(strFilename,4)
On error resume next
oFile.Copy strFldrName & "\" & strNewStampedFileName
If oFSO.FileExist(strFldrName & "\" & strNewStampedFileName) then
wscript.echo "Neuer Dateiname: " & strNewStampedFileName
End if
WScript.Quit
' ------------------------------------
Function DatumZeit
'
' gibt eine Zeichenfolge zurück, die Datum / Zeit enthält
' und als Dateiname / Verzeichnisnae verwendet werden kann
Dim Zeit
Zeit = now()
' wir wollen "JJJJMMTT_hhmm" ...also erstmal: vierstellige Jahreszahl
DatumZeit = Right(Year(Zeit),4)
' ....danach zweistellige Monatszahl
If Len(Month(Zeit)) = 1 then DatumZeit = DatumZeit & "0"
DatumZeit = DatumZeit & Month(Zeit)
' ... dann zweistellige Tageszahl
If Len(Day(Zeit)) = 1 then DatumZeit = DatumZeit & "0"
DatumZeit = DatumZeit & Day(Zeit) & "_" ' den Trenner "_" gleich dazu..
' ... jetzt zweistellige Stundenzahl
If Len(Hour(Zeit)) = 1 then DatumZeit = DatumZeit & "0"
DatumZeit = DatumZeit & Hour(Zeit)
' zweistellige Minutenzahl
If Len(Minute(Zeit)) = 1 then DatumZeit = DatumZeit & "0" & Minute(Zeit)
DatumZeit = DatumZeit & Minute(Zeit)
End Function ' DatumZeit
' **
' ---- snapp copyStamped.vbs
So, dann hast Du am Wochenende was zum Spielen...
Beispielaufruf am CMD-Prompt:
$cmd$cscript //nologo copystamped.vbs z:\autoruns.chm z:\save
Neuer Dateiname: autoruns_20060909_0142.chm
Viel Spaß
Biber