Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

batch datei schreiben?





Frage

hallo, ich will ne Batch Datei machen, die folgende Funktion ausführt: Bei [Klick]: alle Daten des USB Sticks (auf dem die Exe Datei liegt) [kopieren] in einen Ordner auf Laufwerk C: Hinter dem Namen des Ordners soll dann das aktuelle Datum angezeigt werden.... kann mir da jemand helfen, bzw. sagen wie so eine Batch datei aussehen kann?

Antwort 1 von disco

moin

xcopy *.* c:\dasZielVerzeichniss /e /y

das /e bedeutet, dass auch alle unterverzeichnisse kopiert werden

das /y bedeutet, dass bestehende dateien überschrieben werden

wenn du weitere optionen für xcopy wissen möchtest gib in der dos-konsole einfach mal "xcopy /?" ein.

g,
disco

Antwort 2 von Hergy

Hi,

noch besser, Du machst das mit VB-Script:
Kopiere diesen Code in eine Textdatei und Speichere diese mit der Dateiendung " .vbs " ab:

dim fso, datum, quelle
   set fso = CreateObject("Scripting.FileSystemObject")
   datum = date()
fso.copyfolder "  QUELLPFAD", "  ZIELPFAD" & datum 


Bei "QUELLPFAD" mußt Du den absoluten Pfad des zu kopierenden Ordners angeben (am Ende kein "" angeben), wenn du ein komplettes Laufwerk kopieren willst, gibst Du das z.B. so an: " D:* "(sternchen, damit der gesamte Inhalt des Laufwerks kopiert wird)!

Bei "ZIELPFAD" gibst Du den absoluten Pfad des Zielordners an, auch hier läßt Du den Backslasch () am Ende weg, damit der Ordner erstellt wird, wenn er noch nicht existiert!
Du kannst auch Leerzeichen oder Sonderzeichen (außer " / " , " " und " ? " )Verwenden um den Ordnernamen und das Datum zu trennen!!!

Hinweis: Dein Antiviren-Programm wird evtl. Alarmschlagen. Das passiert, sobald ein Script versucht Dateien zu schreiben oder anderweitig zu verändern verändern. Einfach die Ausführeng dieses Scriptes zulassen!!!

Gruß, hergy

Antwort 3 von credo

hallo,

danke für die schnellen Antworten... hab beide Versionen mal ausprobiert....

VBS: funzt bei mir nicht, hab folgenden Text als *.vbs abgespeichert:

dim fso, datum, quelle
set fso = CreateObject("Scripting.FileSystemObject")
datum = date()
fso.copyfolder " H:*" , " C:ackup" & datum

was stimmt daran nicht? hängt das vielleicht mit den " zusammen? Hab da aber auch schon rumexperimentiert, hat aber auch nicht geklappt...


BAT: klappt gut, aber wie kann ich einstellen, dass er mir jedesmal nen neuen Ordner macht, wo nach dem "Backup" das aktuelle Datum zum Ordnernamen hinzugefügt wird?

z.B.: Ordner: Backup_150305

Antwort 4 von credo

habs gefunden.. danke %date%

Antwort 5 von Hergy

Hi,

zur VBS-Version:

sorry, mein Fehler!
Sobald Du im quellpfad einen Platzhalter hast, muß der Zielordner bereits bestehen. Diesen kann man auch im script erstellen.

Hier nocheinmal der passende Code für Dich:

 dim fso, datum, quelle, Ziel
   set fso = CreateObject("Scripting.FileSystemObject")
   datum = date()
   set Ziel = fso.CreateFolder("C:Backup" & datum)
fso.CopyFolder "H:*", Ziel


Gruß, hergy

Antwort 6 von Hergy

...sorry hier nochmal mit Backslashes:

 dim fso, datum, quelle, Ziel
   set fso = CreateObject("Scripting.FileSystemObject")
   datum = date()
   set Ziel = fso.CreateFolder("C:\Backup" & datum)
fso.CopyFolder "H:\*", Ziel



hergy

Antwort 7 von credo

aha.... werd ich gleich mal ausprobieren....

komischerweise läuft die Batch Datei unter XP mit SP2 nicht... woran kann das liegen?

Antwort 8 von Mongo

Versuche es doch mal so:

set fso = CreateObject("Scripting.FileSystemObject")
Ziel="C:\Backup" & date
fso.CreateFolder(Ziel)
fso.CopyFolder "H:\*", Ziel 

Ich weiß nicht, ob CreateFolder überhaupt ein Objekt zurückgibt. Auf jeden Fall benötigt CopyFolder als zweiten Parameter einen String und kein Objekt.

Antwort 9 von Hergy

@Mongo:

du mußt natürlich erst deine Variablen mit

"
dim
"

deklarieren!
Aber Du hast recht, warum:

datum = date() 
set Ziel = fso.CreateFolder("C:\Backup" & datum)
 

Denn:

 set Ziel = fso.CreateFolder("C:\Backup" & date()) 


ist ja kürzer!!!

Also das gesamte vb-script so:

 dim fso, datum, quelle, Ziel 
set fso = CreateObject("Scripting.FileSystemObject") 
set Ziel = fso.CreateFolder("C:\Backup" & date()) 
fso.CopyFolder "I:\*", Ziel, 1


Gruß, hergy

Antwort 10 von Hergy

... nochmal:

dim fso, Ziel 
set fso = CreateObject("Scripting.FileSystemObject") 
fso.CopyFolder "I:*", fso.CreateFolder("C:Backup" & date()), 1


...ist natürlich noch kürzer,weil:
( ...
dim datum, quelle
...)
kann weg

und für:
set Ziel = fso.CreateFolder("C:Backup" & date()) 
fso.CopyFolder "I:*", Ziel, 1 
 

nimmt man:
 fso.CopyFolder "I:*", fso.CreateFolder("C:Backup" & date()), 1



@Mango
 CreateFolder
gibt einen string zurück, sonst würde das ganze ja in eine Fehlermeldung ausarten ;-)

Gruß, hergy

Antwort 11 von Mongo

Zitat:
CreateFolder gibt einen string zurück

Du hast Recht, das habe ich nicht gewußt.

Den Gegenvorschlag habe ich nur gepostet, weil ich dachte, daß das der Fehler wäre. Mir ging es nicht darum es kürzer zu machen.

Trotzdem noch was zu:
Zitat:
du mußt natürlich erst deine Variablen mit "dim" deklarieren!


Das ist wohl bei VB so, aber nicht bei VBS. Da kann man das weglassen und meiner Meinung nach sollte man das sogar tun. Denn man globalisiert damit automatisch alle Variablen. Wenn man dann mal Unterprogramme oder eigene Funktionen benutzt, kann das zum Problem werden. Ich finde man sollte nur Variablen globalisieren, die auch wirklich global sein müssen.

Antwort 12 von Hergy

Hallo,

Zitat Mongo:

->Trotzdem noch was zu:
Zitat:

--> du mußt natürlich erst deine Variablen mit "dim" deklarieren!

->Das ist wohl bei VB so, aber nicht bei VBS....

Stimmt, Du hast recht !!! ich leite wohl zu sehr von VB ab ;-) (irgendwann kommt man durcheinander, wenn man zuviele Prog-Sprachen auf einmal können/lernen will)

Grüße, hergy

Antwort 13 von credo

es funzt nun auf jeden fall....

das blöde is halt noch, dass sich der Laufwerksbuchstabe vom USB Stick je nach rechner verändern kann....

Antwort 14 von credo

VBS:

- kann man bei VBS noch ne funktion reinmachen, dass es irgendetwas anzeigt solange der kopiervorgang läuft? er kopiert im Moment, jedoch weiß ich nicht ob er vielleicht schon fertig ist...
oder am Anfang ne Meldung: Sicherungsvorgang beginnt
und am Ende: Sicherungsvorgang beendet....
geht sowas? bzw. wie?

- was kann ich eingeben, dass er das Laufwerk selbstständig erkennt? (USB-Stick ist ja an den verschiedenen Rechnern unterschiedlich I: H: G: ...)

Antwort 15 von Mongo

Eine Meldung kannst Du so ausgeben:

msgbox "Koiervorgang beendet!",vbinformation


Das Problem mit dem Laufwerksbuchstaben löst Du am einfachsten, indem Du das Skript auf den Stick kopierst und von dort aus ausführst. So wird der Laufwerksbuchstabe gefunden:

set fso=createobject("scripting.filesystemobject")
f=fso.getparentfoldername(wscript.scriptfullname)
set o=fso.getfolder(f)
while not o.isrootfolder
 f=fso.getparentfoldername(f)
 set o=fso.getfolder(f)
wend
msgbox f

Nachteil ist, daß dann das Skript mitkopiert wird. Wenn Dich das stört, kannst Du es ja nachträglich löschen (mit der deletefile-Methode).
Wenn es aber von der Festplatte gestartet werden soll, findest Du den Stick am einfachsten über seinen Namen:

set fso=createobject("scripting.filesystemobject")
set d=fso.drives
letter=""
for each dd in d
 if dd.driveletter<>"A" and dd.driveletter<>"B" then
  if dd.isready then
   if dd.volumename="STICKNAME" then letter=dd.driveletter
  end if
 end if
next
if letter="" then
 msgbox "USB-Stick nicht gefunden!",vbcritical
 wscript.quit
end if
msgbox letter

Für "STICKNAME" mußt Du den Namen eingeben, den Du Deinem Stick gegeben hast. Einbauen mußt Du die Elemente selber, denn ich weiß ja nicht wie Dein funktionierendes Skript momentan aussieht. ;-)

Antwort 16 von Mongo

Zitat:
irgendwann kommt man durcheinander, wenn man zuviele Prog-Sprachen auf einmal können/lernen will


Das Problem kommt mir bekannt vor, wobei zuviel bei mir schon bei Zwei angefangen hat ;-)

Antwort 17 von credo

msgbox ist perfekt.....

gibt es auch ne einfache möglichkeit, den Kopierstatus anzuzeigen? nen Balken oder Prozentangabe oder so was....

Antwort 18 von Mongo

Ich kenne da nichts Vorgefertigtes. Man könnte da was mit dem IE als Anzeigefenster basteln (Balken), oder das Skript in der Konsole ausführen (Prozentangabe). Aber man müßte dann alle Objekte einzeln kopieren und zwischendurch den Fortschritt immer selbst berechnen. Sehr hoher Aufwand!

Antwort 19 von credo

ok... dann lass ich das wohl mal weg... ;-)

kann man den Quelltext in Delphi einbauen?

Antwort 20 von credo

bzw. kann ich aus einer *.vbs eine *.exe machen?

Antwort 21 von Mongo

Zitat:
kann man den Quelltext in Delphi einbauen?

In welcher Stadt Du das machst, ist egal .. ;-)

So weit ich weiß ist VBS eine Teilmenge von VB, also müßte man es, zumindest mit kleinen Anpassungen, damit compilieren können.

Antwort 22 von Mongo

Zitat:
kann man den Quelltext in Delphi einbauen?

In welcher Stadt Du das machst ist egal ;-)

Soweit ich weiß, ist VBS eine Teilmenge von VB. Also sollte man es, zumindest mit kleinen Anpassungen, damit compilieren können.

Antwort 23 von Slidemaster

Hallo ich möchte gern was ähnliches machen:
Ich möchte ne bat schreiben wo ich nur draufklicken muss und der dann meine ip automatisch wechselt!

geht das?

wenn ja wie? :)

Danke im Vorraus!

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: