Kopieren wie mit einer Batchdatei?

Anfängerfragen zum Programmieren mit PureBasic.
Don Hermano
Beiträge: 2
Registriert: 29.07.2009 13:37

Kopieren wie mit einer Batchdatei?

Beitrag von Don Hermano »

Hallo alle Zusammen, jetzt bin ich gerade mal ein paar Stunden stolzer Besitzer einer Purbasic Lizenz und schon häufen sich die Fragen.

Ich möchte von einem Serverlaufwerk (Lese und Schreibrechte vorhanden) ein Template für unsere AutoCAD User (Ordner mit Unterordner und Dateien)
auf den jeweiligen Client kopieren. Das dient dazu die Grundeinstellungen von AutoCAD wieder herzustellen wenn gar nichts mehr geht.

Das alles habe ich bis jetzt einfach per Batch-Datei erledigt, da ist es
ja so das die Ordner/Dateien einfach Über den Bestand drüberkopiert werden können und fehlende Dateien werden einfach hinzugefügt.

Laut Beispiel in der Hilfe sollte das ganze so aussehen:

Code: Alles auswählen

CopyDirectory("P:\OFML_Updates\Tools\BCMP\Help", "D:\EGR\Programme\BueroCAD MP OEM\BCMP\Support\Help", "", #PB_FileSystem_Recursive)          
CopyDirectory("P:\OFML_Updates\Tools\BCMP\ACAD", "D:\EGR\Programme\BueroCAD MP OEM\BCMP\win\ACAD", "", #PB_FileSystem_Recursive)              
CopyDirectory("P:\OFML_Updates\Tools\BCMP\PLKP", "D:\EGR\Programme\BueroCAD MP OEM\PLKP", "", #PB_FileSystem_Recursive)                       
CopyDirectory("P:\OFML_Updates\Tools\BCMP\Script", "D:\EGR\Programme\BueroCAD MP OEM\BCMP\Script", "", #PB_FileSystem_Recursive)              
CopyDirectory("P:\OFML_Updates\Tools\BCMP\Template", "D:\EGR\Programme\BueroCAD MP OEM\BCMP\Template", "", #PB_FileSystem_Recursive)          
CopyFile("P:\OFML_Updates\Tools\BCMP\BCMP.dwt", "D:\EGR\Programme\BueroCAD MP OEM\BCMP\Template\BCMP.dwt")      
CopyFile("P:\OFML_Updates\Tools\BCMP\BCMP.cui", "D:\EGR\Programme\BueroCAD MP OEM\BCMP\Support\BCMP.cui")       
CopyFile("P:\OFML_Updates\Tools\BCMP\Blaha.ctb", "D:\EGR\Programme\BueroCAD MP OEM\BCMP\Plot Styles\Blaha.ctb") 
CopyFile("P:\OFML_Updates\Tools\BCMP\standard.reg", "D:\EGR\Programme\BueroCAD MP OEM\standard.reg")

RunProgram ("D:\EGR\Programme\BueroCAD MP OEM\standard.reg")
Passieren tut aber nichts, bin ich einfach nur blöd oder habe ich einen falschen Gedankengang?

Vielleicht kann mir jemand weiterhelfen?

Gruß
Don Hermano

Code-Tags ergänzt - Kaeru fecit
Little John

Beitrag von Little John »

Hallo,

bei Deinen CopyDirectory()-Befehlen hast Du als Parameter für das Dateinamen-Muster immer "" angegeben. Sollte das nicht eher "*.*" sein?

Gruß, Little John
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Am besten machste erstmal nur ein Copydirectory und läßte Dir das ergebnis
debuggen. Wenns fehlschlägt vergleichste nochmal die Beschreibung, das
Beispiel in der Hilfe mit Deinen Code. Z.B. enden Deine Pfadangaben nicht
mit einem Backslash.
Wenn das klappt, vervollständigst den Code und machts mit Copyfile weiter,
bis es funktioniert und Du alle Fehler gefunden hast.

PS: wirklich Sinnvoll dies als Exe zu machen, gegenüber einem Batch ist es
wirklich nicht, aber vielleicht eine nette Übung für Dich :wink:

Gruß

Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Little John hat geschrieben:bei Deinen CopyDirectory()-Befehlen hast Du als Parameter für das Dateinamen-Muster immer "" angegeben. Sollte das nicht eher "*.*" sein?
[grins] war auch mein erster Gedanke, aber ein Blick in die Hilfe und
ich war schlauer:
Standardmäßig ein Null-String ("") als Pattern$ wird alle Dateien kopieren.
(seltsame Formulierung btw...)

Grüße ... Kiffi
a²+b²=mc²
Little John

Beitrag von Little John »

Kiffi hat geschrieben:[grins] war auch mein erster Gedanke, aber ein Blick in die Hilfe und
ich war schlauer:
Standardmäßig ein Null-String ("") als Pattern$ wird alle Dateien kopieren.
Ooops ... ja. ich habe CopyDirectory() selbst noch nie benutzt.

Gruß, Little John
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Beitrag von Waldixxl »

Hallo Don Hermano
wenn ich mich nicht täusche legt CopyDirectory() das Zielverzeichnis nicht automatisch an.
d.h. Diese Verzeichnis erst per Hand anlegen
(kann es aus Zeitmangel nicht testen)
Viel Glück
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.

Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Don Hermano
Beiträge: 2
Registriert: 29.07.2009 13:37

Beitrag von Don Hermano »

Danke Leute für eure raschen Antworten!

Tja bis jetzt habe ich folgendes geschafft:
1. Der Code ist soweit in Ordnung solange er Lokal ausgeführt wird, also von c:\ nach d:\

2. Über Netzwerk weigert sich das Programm standhaft - im übrigen
habe ich einen Bekannten gebeten ob er eine Möglichkeit kennt.
Sein Programm in C# funktioniert problemlos.

Ich werde jetzt die Not zur Tugend machen und alle Templates mit
samt der .exe lokal bunkern. Dann können die Anwender auch ihr
AutoCAD reparieren wenn sie vor Ort beim Kunden sind und nicht im Netz hängen.

Ach ja, noch eine Frage ich starte mit
RunProgram ("D:\EGR\Programme\BueroCAD MP OEM\standard.reg")
die Registrierungsdatei - kann man irgendwie diese nervende Bestätigung
von Windows abstellen (...sind sie sicher das sie diese Registrierungsdatei ausführen wollen.... etc.)

Gruß aus Österreich

Don Hermano

ps. sehr nettes Board!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Don Hermano hat geschrieben: Ach ja, noch eine Frage ich starte mit
RunProgram ("D:\EGR\Programme\BueroCAD MP OEM\standard.reg")
die Registrierungsdatei - kann man irgendwie diese nervende Bestätigung
von Windows abstellen (...sind sie sicher das sie diese Registrierungsdatei ausführen wollen.... etc.)
Sollte so gehen:

Code: Alles auswählen

RunProgram("Regedit", "/S " + #DQUOTE$ + "D:\EGR\Programme\BueroCAD MP OEM\standard.reg" + #DQUOTE$, "")
Allerdings wird unter Vista/7 UAC aufpoppen.

Für das, was Du bisher machst ist aber die Batch-Datei das optimale
Werkzeug, exe erschwert nur die Wartung.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag von Rokur »

Du kannst den Registrierungseditor mit der Option /s (heißt wohl silent) aufrufen:

Code: Alles auswählen

Regedit /s Datei.reg
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Don Hermano hat geschrieben: 2. Über Netzwerk weigert sich das Programm standhaft - im übrigen
habe ich einen Bekannten gebeten ob er eine Möglichkeit kennt.
Sein Programm in C# funktioniert problemlos.
Hab das kopieren mal auf einem Netzlaufwerk getestet, funktioniert tadellos.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten