Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBSkript umschreiben, um eine Datei zu kopieren (absoluter Anfänger!)

Frage Entwicklung VB for Applications

Mitglied: Nina1985

Nina1985 (Level 1) - Jetzt verbinden

08.09.2006, aktualisiert 09.09.2006, 5572 Aufrufe, 4 Kommentare

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
Mitglied: Biber
08.09.2006 um 18:37 Uhr
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:
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.

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?
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
Bitte warten ..
Mitglied: Nina1985
08.09.2006 um 19:23 Uhr
Hallo Biber,

erst mal vielen, vielen Dank für diese nette, ausführliche Antwort! Ich bin froh, dass es anscheinend wirklich Menschen gibt, die sich noch an die Stelle eines Anfängers denken können und einen nicht mit einer Antwort konfrontieren, die man aufgrund fehlender Vorkenntnisse nicht versteht. Bis jetzt habe ich bei sowas immer eher schlechte Erfahrungen gemacht, also vielen Dank noch mal. Ich werde jetzt mal versuchen, die Fragen, die du gestellt hast, zu beantworten.

Wie bekommt das Programm das mit?
Jaaa, das würde ich auch gerne wissen . Sorry, aber an der Stelle "hakt" es bei mir schon. Wenn ich mit der Beispiel-Datei vergleiche, dann nehme ich an, dass die Befehle "Create Object" und "Get Folder" etwas damit zu tun haben, aber wie das Programm das jetzt wirklich mitbekommt, weiß ich nicht. Ich muss auch gestehen, dass mir die ganzen Sachen ganz oben, vor denen jeweils "Dim" steht, nichts sagen.

Welche Infos muss das Programm bekommen, um
eine Datei von A nach B zu kopieren?
So, das kann ich versuchen: Es muss erstens wissen, wo A ist, zweitens, wie die Datei heißt, es muss die Info bekommen, dass es kopieren soll und es muss wissen, wo B ist. Das wäre so meinen naiven Ideen dazu .

Muss ich vorsehen, dass auch alle *.mp3-Dateien kopiert werden sollen oder ist es IMMER exakt eine?
Da hast du mich jetzt verwirrt, meintest du .jpg-Dateien, die ich ja als Beispiel angegeben hatte oder hast du dich da auf das Beispiel-Skript bezogen? Es geht immer um eine Datei und zwar jedes Mal die gleiche. Wenn ich es richtig verstanden habe, wird mit dieser Datei die ganze Zeit gearbeitet, d. h., sie verändert sich und man möchte sozusagen "im Hintegrund" ein Skript, das die Datei kopiert, falls irgendwas schief geht.

Was soll passieren, wenn die Quelldatei nicht gefunden wird?
Da bin ich überfragt, kann man davon ausgehen, dass das nicht stattfindet? Wenn nicht und sie wird nicht gefunden, dann soll am besten gar nichts passieren.

Was, wenn es den Zielordner nicht gibt?
Kann man ihn dann erstellen lassen?

Was, wenn die Zieldatei schon vorhanden ist?
Da bin ich jetzt davon ausgegangen, dass das nicht sein kann, da ja durch die Datums- und Zeitangaben ein jeweils anderer Name gewährt ist, wenn man davon ausgeht, dass nicht mehrmals pro Minute kopiert wird.

Was, wenn die nicht auf das Laufwerk passt?
Da bin ich auch überfragt, ich denke, das passiert nicht, aber wenn doch... Hm, dann würde ich mal sagen, soll am besten auch gar nichts kopiert werden.

Fehler auf den Bildschirm? Oder in eine Logdatei?
Ach so, oder gehörte das noch zu der Frage obendrüber? Dann wäre ein Fehler auf dem Bildschirm gut. Aber muss das da rein? Oder kann man darüber auch einfach gar keine Infos angeben?

Und Erfolgsmeldungen?
Nein, sollen nicht angezeigt werden.

> - und zwar als "test_datumzeit.jpg",
Na ja.. wie sieht denn Datumzeit aus? JJJJMMTT_hhmm? Oder mit Sekunden? Was ist sinnvoll?
JJJMMTT_hhmm klingt gut. (20060908_1920 wäre dann ein Beispiel? Ich denke mal, das kann man zur Not auch hinterher noch anpassen, oder?)

> - 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?
Aktuell heißt (und da muss ich jetzt auch raten, wie es in dem konkreten Fall am besten wäre) wahrscheinlich am ehesten die Uhrzeit des Kopie-Starts und da es sich wie gesagt immer nur um eine Datei handelt, dürfte das dann ja einfacher werden.

So, ich hoffe, das hat etwas Licht in die Sache gebracht . Vielen Dank und noch mal und ich würde mich auf die "handwerkliche" Hilfe freuen!

Nina
Bitte warten ..
Mitglied: Biber
09.09.2006 um 01:59 Uhr
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...

01.
' --------snipp copyStamped.vbs Vers. 001 (mit kleinen Fehlern!) 
02.
' !!! Aufruf zumindest beim Testen vom CMD-Prompt:  
03.
' !!!  cscript //nologo copyStamped.vbs sourceFile targetFolder 
04.
' --- später auch so: 
05.
' copyStamped.vbs [lw:\path\]sourceFile targetFolder 
06.
Option Explicit 'Tippfehler vermeiden - nur deklarierte Variablen verwenden 
07.
 
08.
' wir schreiben in VBSkript... also benennen wir auch Variablen englisch 
09.
' oXXX.. wenn es um Objects geht.. strYYY, wenn es um Strings geht 
10.
Dim oFSO, oFile, strFileName, strNewStampedFilename, strFldrName 
11.
 
12.
' Wir brauchen 2 Parameter (sourceFile und targetFolder) zwingend-  
13.
' Sonst brauchen wir nicht anfangen- Also müssen zwei Argumente da sein. 
14.
' In VBS heißen die wscript.arguments(n) von 0 bis wscript.arguments.count 
15.
If wscript.arguments.count() < 2 then ' weniger als 2 Parameter? Dann Feierabend 
16.
   wscript.echo "Fehler: Parameter fehlt. Aufruf: copyStamped [path:\]sourceFile.ext targetFolder" 
17.
   wscript.quit(4) 'Raus mit Errorlevel 4 => soll bedeuten: "Parameterfehler" 
18.
end if 
19.
 
20.
' "einfache" Variablentypen wie Strings und numerische Werte mit [ var=wert] zuweisen 
21.
strFileName = wscript.arguments(0) 'voller Quell-Dateiname ist Parameter 1 
22.
strFldrName = wscript.arguments(1) 'Ziel-Ordner ist in Parameter 2 übergeben 
23.
 
24.
' "nicht so einfache" Variablentypen wie Objects werden mit "Set oXXX = ..." instanziert 
25.
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject") 
26.
 
27.
If not oFSO.FileExists(strFileName) then  ' existiert die angegebene Datei? 
28.
   wscript.echo "Fehler: Datei " & strFileName & " nicht gefunden." 
29.
   wscript.quit(2) 'Raus mit Errorlevel 2 => Soll bedeuten: Quelldatei nicht gefunden  
30.
End if    
31.
 
32.
If not oFSO.FolderExists(strFldrName) then  ' existiert der angegebene Zielordner? 
33.
   ' Anmerkung: In der Version 0.02 könne wir auch den Zielordner bei Bedarf anlegen 
34.
   ' dann würde jetzt folgen: oFSO.CreateFolder(strFldrName) ... heben wir auf für später 
35.
   ' jetzt behaupten wir: Zielordner MUSS da sein. 
36.
   wscript.echo "Fehler: Zielordner " & strFldrName & " nicht gefunden." 
37.
   wscript.quit(2) 'Raus mit Errorlevel 3 => Soll bedeuten: Zielordner nicht gefunden  
38.
End if    
39.
       
40.
Set oFile=oFSO.GetFile(strFileName) 
41.
strNewStampedFileName = oFSO.GetBaseName(strFilename) & "_" & DatumZeit &  right(strFilename,4)  
42.
On error resume next 
43.
oFile.Copy strFldrName & "\" & strNewStampedFileName  
44.
If oFSO.FileExist(strFldrName & "\" & strNewStampedFileName) then 
45.
   wscript.echo "Neuer Dateiname: " & strNewStampedFileName 
46.
End if 
47.
WScript.Quit 
48.
 
49.
' ------------------------------------  
50.
Function DatumZeit  
51.
'  
52.
' gibt eine Zeichenfolge zurück, die Datum / Zeit enthält 
53.
' und als Dateiname / Verzeichnisnae verwendet werden kann 
54.
 
55.
Dim Zeit 
56.
Zeit = now()  
57.
' wir wollen "JJJJMMTT_hhmm" ...also erstmal: vierstellige Jahreszahl  
58.
DatumZeit = Right(Year(Zeit),4)  
59.
' ....danach zweistellige Monatszahl  
60.
If Len(Month(Zeit)) = 1 then DatumZeit = DatumZeit & "0"  
61.
DatumZeit = DatumZeit & Month(Zeit)  
62.
' ... dann zweistellige Tageszahl  
63.
If Len(Day(Zeit)) = 1 then DatumZeit = DatumZeit & "0"  
64.
DatumZeit = DatumZeit & Day(Zeit) & "_"  ' den Trenner "_" gleich dazu.. 
65.
' ... jetzt zweistellige Stundenzahl 
66.
If Len(Hour(Zeit)) = 1 then DatumZeit = DatumZeit & "0" 
67.
DatumZeit = DatumZeit & Hour(Zeit)  
68.
' zweistellige Minutenzahl  
69.
If Len(Minute(Zeit)) = 1 then DatumZeit = DatumZeit & "0" & Minute(Zeit)  
70.
DatumZeit = DatumZeit & Minute(Zeit)  
71.
End Function ' DatumZeit  
72.
' ** 
73.
' ---- snapp copyStamped.vbs
So, dann hast Du am Wochenende was zum Spielen...
Beispielaufruf am CMD-Prompt:
01.
$cmd$cscript //nologo copystamped.vbs z:\autoruns.chm z:\save 
02.
Neuer Dateiname: autoruns_20060909_0142.chm
Viel Spaß
Biber
Bitte warten ..
Mitglied: Atti58
09.09.2006 um 10:42 Uhr
@Biber:

Du bist einfach der Beste ...

Gruß

Atti
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

C und C++
gelöst In einer Windows Form Anwendung per Button eine Datei kopieren (4)

Frage von Knuefi zum Thema C und C ...

Batch & Shell
gelöst Powershell Datei kopieren mit ACL Script funktioniert nicht (4)

Frage von xpxy15 zum Thema Batch & Shell ...

Batch & Shell
Batch: Word Datei kopieren und umbennen (9)

Frage von ExcelNoob177 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...