|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 107
|
Verfasst am: 23.03.2013, 01:59 Titel: |
|
|
Zitat: |
- Ich habe auch kein Ahnung wo die (?text?) gebildet wird, |
Genauso wie text$ aus deinem DIR4.BAS
Wenn text voeher als Stringvariable geDIMmt (DIM text as STRING) wird, kann das $ entfallen.
Zitat: |
- OPEN text FOR INPUT AS #2; [Pfad nicht gefunden] -? |
text ist eine Zeile aus der "dat.dat".
Wenn in der dat.dat nicht mehr vorhandene Verzeichnisse stehen kommt der Fehler.
Also: Vorher dein DIR3.BAS laufen lassen. |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 23.03.2013, 17:27 Titel: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
- Danke für die Info mit dem Text, auch wenn ich die Abläufe leider immer
noch nicht nachvollziehen kann.
- Aber daran liegt das Problem nicht.
- Weil ich die Dir3 + Dir4 noch nicht zusammen stellen kann,
lasse ich sie über eine dir.bat nacheinander ablaufen.
- Die dat.dat ist aktuell und alle *.txt Dateien sind in den Unterverzeichnissen vorhanden
und jede ist etwa 30k groß.
- Auch die eine, durch die QB kopierte, default.txt ist wirklich eine Kopie.
- Bei dem Versuchen ist mir schon passiert, das meine "Original.txt" plötzlich leer waren!
- Ich weiß nicht, warum der Aufruf den zweiten Pfad nicht findet,wenn er ihm selbst
auf dem Schirm schreibt, nach dem den ersten Pfad ohne Problem erledigt hat.
@HorstD habe noch einmal Dein FirstBas studiert und werde nun vorsorglich:
- Bem. Ich boote den PC über Diskette, auf der die nötige Programme sein müssen,
denn die C:\Part. ist TABU! OS ist iRMX. [Dort ist aber im C:\DOS Verzeichnis die QB.]
- Eine D:\ Partition habe ich für Sicherungen angelegt.
[Dort habe ich "nur für die Erstellung des Programms" falls ich es doch mit *.exe ausführen muss,
eine qb_4_5_d kopiert, mit der ich nun arbeite.]
- Da die D:\Part. bei Hdisk Problemen nicht viel Wert ist,
brauche ich die "Produkt" Konfigurationen wieder (komprimiert) auf der Diskette.
- Nun werde ich noch versuchen die A:\config.sys mit mem zu optimieren, (nach Deiner FirstBas)
um auszuschließen, dass mir der Speicher für den Aufruf nicht ausreicht.
- Weiter weiß ich nicht mehr.
Danke noch für die nette Hilfe. |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 24.03.2013, 03:00 Titel: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
- Die Config.sys hatte memmaker optimiert, leider ohne Erfolg.
- Gibt es möglich eine Einzelschritt Möglichkeit um das Problem einzugrenzen? |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 24.03.2013, 22:58 Titel: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
@HorstD - Ein unbeschreiblichen DANK - es geht
- Ich habe das ganze Wochenende die FBReferenz mit Deinem Code
studiert, und vieles verstanden - Deine Lösung ist einfach GENIAL. -DANKE
- Ich muss leider bestehen, das ich immer noch nicht verstehe warum es funktioniert,
denn ich erkenne den copy Vorgang nicht.
(Aber zwischen Himmel und Erde passiert es so viel, was ein sterbliche nicht verstehten kann..)
- In Deinem Code habe ich die Funktion der p Variable nicht in der Referenz nicht gefunden,
also habe ich sie gelöscht. Das wars
[Nach einigen Stunden "meckern" von QB wegen richtigem Formulierung.]
-Nun die Endfassung:
DIM text AS STRING, tmp AS STRING
DIM ziel AS STRING
DIM i AS INTEGER, p AS INTEGER
ziel = "D:\2013\" '<-- Zielverzeichnis muss vorhanden sein
CLS
OPEN "dat.dat" FOR INPUT AS #1 'Textdatei öffnen
DO UNTIL EOF(1)
LINE INPUT #1, text
PRINT text
IF UCASE$(RIGHT$(text, 3)) = "TXT" THEN
i = 1
WHILE INSTR(i, text, "\")
i = i + 1
WEND
OPEN text FOR INPUT AS #2 'Textdatei öffnen
OPEN ziel + MID$(text, i) FOR OUTPUT AS #3'Textdatei im Zielverzeichnis erstellen
WHILE NOT EOF(2)
LINE INPUT #2, tmp 'Txt-Datei zeilenweise lesen
PRINT #3, tmp 'und in neue Datei im Zielverzeichnis schreiben.
WEND
CLOSE #2
CLOSE #3
END IF
LOOP
CLOSE #1
- Nun zum Ende: Ich habe in der letzen Zeit, so viel Tutorials über QBasic
gelesen, aber nirgendwo etwas über das kopieren oder verschieben von
!schon vorhandenen! Dateien/Verzeichnissen gefunden.
- Für Deutsche Quelle wäre ich sehr Dankbar.
@nemored Ohne "Deine" Referenz hätte ich keine Schanze. DANKE
- Nun muss ich noch die verschiedene Code Stücke zusammen bekommen.
- Mein Nachteste Problem ist, das Ziel (nun 2013)
mit dem Code von nemored (Tagesverzeichnis) zu ersetzen.
- Da ich aber mit euch sehr viel Glück habe, wird es auch gehen.
- Noch einmal einen UNBESCHREIBLICHEN DANK |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 25.03.2013, 23:48 Titel: |
|
|
Da Dein aktueller Code in dem Sinn ohne präzise Spezifikation entstanden ist: Du hast also in dem Sinn die Verzeichnisstruktur-"Flachklopf"-Variante ausgesucht (=das "FOO\BAR1\BAR2" bei C:\QUELLE\FOO\BAR1\BAR2\XY.TXT geht verloren) + gleichnamiges aus ursprünglich verschiedenen Verzeichnissen darf überschrieben werden.
Kleines Detail noch beim Kopieren: Auf diese Weise gehen übrigens das Modifikationsdatum sowie Attribute verloren, d.h. .TXT-Dateien im D:\ZIEL trägen alle das heutige Datum. Falls diese bei der Kopie erhalten bleiben sollen, wäre SHELL "copy .." geeignet bzw. nach dem CLOSE der Zieldatei noch mit CALL INTERRUPT die Routine INT 21h, AH=43h (Attribute wie Readonly, Archive, Hidden usw. abfragen + setzen) sowie INT 21h, AH=57h (Modifikationsdatum abfragen bzw. setzen) notwendig. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 26.03.2013, 02:11 Titel: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
@dreael, Danke für die Antwort. Ich habe gehofft, das sich jemand erbarmt und mir verrät,
wie ich das aktuelle Datum hinbekomme und es kommt eine Nachricht
mit mit Inhalt der ich (leider) überhaupt nicht verstehe.
- Habe es gerade kontrolliert. Du hast natürlich recht. Das Datum wurde geändert.
Es fiel mir nicht auf! Aber von INTERRUPT verstehe ich genauso wenig wie von QBasic.
- Wenn ich wusste, wie ich den Copy Befehl schreiben soll, damit er auch
"über" ein für die Batch "unbekanntes" Verzeichnis kopiert, wäre das ganze Thema
überhaupt nicht enstanden. Aber Du hast recht, das original Datum wäre mir natürlich lieber gewesen.
(Man kan nicht alles haben, [wenn man es nicht besser kann]].
- Schade das ich Dich nicht besser verstehe und DANKE FÜR DIE MÜHE,
auch wenn ich es vermutlich nie verstehen werde. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 26.03.2013, 23:23 Titel: |
|
|
Zum aktuellen Datum: Einfach auf DATE$ zurückgreifen. Da Du vermutlich einen Verzeichnisname im Format JJJJMMTT benötigst: Mit LEFT$()/MID$()/RIGHT$() passend "zerpflücken". Verzeichnisse am Ziel anlegen: QBasic-Befehl MKDIR.
Zum Thema CALL INTERRUPT ein Artikel aus meiner Sammlung:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/DOS-Interrupts.html _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 27.03.2013, 01:37 Titel: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
- Danke. Dein Artikel werde ich gern studieren. Darf ich fragen,
ob Deine Sammlung irgendwo zugänglich ist?
- Dein Artikel war "ausnahmsweise" recht gut verständlich.
- "Einfach" auf DATE$ zurückgreifen kann man schreiben wenn man weiß wie?
- Ich weiß leider nicht, wo ich nachlesen kann, wie man gerade das "zerpflückte"
Neue Name weiter als Variable verwenden kann.
- Vermutlich erste Klasse einer Sprache, aber ich träume davon es zu können.
- Konkret:
MKDIR "D:\"+RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
SYSTEM
- Habt ihr mir beigebracht.
- Wie kann ich es aber als SET "heute=[und nun den Pfad] mit environ$ einsetzen?
- Bis jetzt endet jegliches Versuch mit der Meldung "Zu wenig Speicher!"
- Der einziger Problem mit Dir ist, wenn ich eine Frage stelle, bekomme ich zwei zurück.
- Ich muss Heute früh, über 3/4 Deutschland, beruflich nach Cottbus fahren, weiter nach
Prag, (über Ostern) und dann, bis Wochenende nach Polen.
- Schreibe nur vorsorglich, damit Ihr nicht denkt, das ich aufgegeben habe.
- Danke schön für alles und schöne Ostern. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 27.03.2013, 13:51 Titel: Re: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
bm-magic hat Folgendes geschrieben: | - Konkret:
MKDIR "D:\"+RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
SYSTEM
- Habt ihr mir beigebracht.
- Wie kann ich es aber als SET "heute=[und nun den Pfad] mit environ$ einsetzen? |
Noch einmal zur Erinnerung:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/EinbettungBSY.html
Vater-Sohn-Prozessprinzip! Mit SYSTEM endet der Sohnprozess und damit getätigte Umgebungsvariablenmutationen! Was dagegen klappt:
Code: | ENVIRON "foo=bar"
SHELL "echo %foo%" |
Drandenken: SHELL erzeugt einen Sohnprozess, dieser bekommt von den Umgebungsvariablen eine Kopie vom Vater, in diesem Fall ist QBASIC.EXE der Vater.
Tipp also: Tagesordner mit QB erstellen lassen, z.B.
Code: | heute$ = RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
MKDIR "D:\" + heute$
ENVIRON "HEUTE=" + heute$
SHELL "backup.bat"
SYSTEM |
Und in BACKUP.BAT, welches als Sohnprozess läuft, darfst Du nun beispielsweise
Code: | REM Backup erstellen
XCOPY *.TXT D:\%HEUTE% /s/e |
aufrufen.
bm-magic hat Folgendes geschrieben: | - Bis jetzt endet jegliches Versuch mit der Meldung "Zu wenig Speicher!" |
Auch da gibt es eine Lösung: Zeile
CONFIG.SYS hat Folgendes geschrieben: | SHELL=C:\COMMAND.COM /P /E:8192 |
d.h. Umgebungsvariablenspeicher kann vergrössert werden. Beachte jedoch: DOS unterliegt der berühmten 640 KB-Grenze (konventioneller Speicher), da nützt Dir auch der Einbau von x GB-RAM-Riegeln nichts -> somit also bei /E nur sehr sparsam vergrössern.
Siehe dazu Microsoft KB230205. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 06.05.2013, 19:31 Titel: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
@dreael einen Riesen Dank, ich habe die Lösung:
- Für einen Profi vermutlich lachhaft... aber es geht.
[DIM text AS STRING, tmp AS STRING
DIM ziel AS STRING
DIM i AS INTEGER, p AS INTEGER
DIM bef AS STRING
DIM heu AS STRING
bef = "COPY "
heu = RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
MKDIR "D:\" + heu
MKDIR "D:\" + heu + "\CNF"
ziel = " D:\" + heu '<-- Zielverzeichnis muss vorhanden sein
CLS
SHELL "dir D:\PCNFG\*.txt /W /B /S > D:\qbasic\dat.dat"
CLS
OPEN "dat.dat" FOR INPUT AS #1 'Textdatei öffnen
DO UNTIL EOF(1)
LINE INPUT #1, text
PRINT bef + text + ziel + "\CNF\*.*"
SHELL bef + text + ziel + "\CNF\*.*"
IF UCASE$(RIGHT$(text, 3)) = "TXT" THEN
i = 1
WHILE INSTR(i, text, "\")
i = i + 1
WEND
END IF
LOOP
CLOSE #1
KILL "dat.dat"
@ Alle
- Noch eine Frage:
sollte ich etwas ändern?
- Und eine Anregung:
Wenn es in einem QBasic Tutorials nur ein paar Zeilen
über "automatische Bearbeitung von Verzeichnissen und/oder Dateien
stehen würde, hätte es mich fast ein viertel Jahr Verzweiflung erspart.
- Ich Danke euch für euer Geduld und dafür, dass dieses Forum gibt! |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 06.05.2013, 20:11 Titel: Re: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
[quote="bm-magic"]sollte ich etwas ändern?
Verschiedene Optimierungen sind denkbar.
Code: | CONST qpfad$ = "D:\PCNFG\"
CONST zpfad$ = "D:\"
DIM text AS STRING
DIM ziel AS STRING
DIM fh AS INTEGER
DIM bef AS STRING
DIM heu AS STRING
heu = RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
ziel = zpfad$ + heu '<-- Zielverzeichnis muss vorhanden sein
MKDIR ziel
MKDIR ziel + "\CNF"
CLS
SHELL "dir D:\PCNFG\*.txt /W /B /S >" + ENVIRON$("TEMP") + "\~dat.tmp"
CLS
fh = FREEFILE
OPEN ENVIRON$("TEMP") + "\~dat.tmp" FOR INPUT AS #fh 'Textdatei öffnen
DO UNTIL EOF(fh)
LINE INPUT #fh, text
bef = "COPY " + text + " " + ziel + "\CNF"
PRINT bef
SHELL bef
LOOP
CLOSE #fh
KILL ENVIRON$("TEMP") + "\~dat.tmp" |
Diverse Optimierungen vorgenommen:
- Temporäre Datei mit der Verzeichnisliste in %TEMP% genommen
- Pfade als Konstanten; denke an den Fall, wo das Laufwerk statt D:\ vielleicht einmal Q:\ heisst...
- etlicher "dead code" entfernt (z.B. das "i" hattest Du nicht mehr weiter verarbeitet)
Und um aufs wichtigste Thema auch zurückzukommen, nämlich der genauen Aufgabenspezifikation: In dem Sinn hast Du Dich nun für die Ordnerhierarchie-Zerschlagung entschieden.
Was aktuell noch fehlt, ist das Handling bei identischen Dateinamen in unterschiedlichen Quellordnern, z.B.
D:\PCNFG\FOO\GLEICH.TXT
D:\PCNFG\BAR\GLEICH.TXT
Falls einfach überschrieben werden soll, wäre ein SHELL "copy /y " ... sinnvoll. Alternativ kannst Du es auch so lassen, dann müsste eine Überschreibfrage erscheinen -> wird dann dafür nicht mehr vollautomatisch durchlaufen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 07.05.2013, 21:32 Titel: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
@dreael. Für Deine Optimierung bleibe ich Dir "ewig" dankbar.
- Die CONST muss ich noch verstehen lernen.
- Leider funktioniert es mit dem Temp nicht, auch wenn es mir
sehr gefällt. (Ob als *.bas oder *.exe )
- Gleiche Dateinamen kommen bei mir nicht vor,
aber ich werde es versuchen zu lösen.
- DANKE |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 08.05.2013, 17:51 Titel: Re: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
bm-magic hat Folgendes geschrieben: | - Die CONST muss ich noch verstehen lernen. |
Ist schnell erklärt: Im Prinzip eine Nur-Lese-Variable, welcher Du nur einmalig zu Beginn beim CONST etwas zuweisen kannst, danach nicht mehr verändern.
bm-magic hat Folgendes geschrieben: | - Leider funktioniert es mit dem Temp nicht, auch wenn es mir sehr gefällt. |
Hier bitte mit einem
überprüfen, ob %TEMP% definiert ist (ist bei einem auf Festplatte mit den berühmten drei Disketten installierten MS-DOS 6.22 immer vorhanden, bei Windows sowieso). => Bei Bedarf also noch ein passendes
in die AUTOEXEC.BAT einfügen; dabei entsprechender Ordner auch anlegen. Bei Diskette ist ein RAMDRIVE.SYS sinnvoll und dort das %TEMP% platziert. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 08.05.2013, 22:17 Titel: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
@dreael. DANKE.
- Temp ist im Ordnung, aber mit Environ bricht das Programm ab!
- Ich habe nun ein zweites Quell Pfad hinzugefügt und hier ist das
Ergebnis:
CONST qpfad$ = "C:\V496\LSYS\"
CONST zpfad$ = "D:\"
DIM text AS STRING
DIM ziel AS STRING
DIM fh AS INTEGER
DIM bef AS STRING
DIM heu AS STRING
DIM dir AS STRING
heu = RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
ziel = zpfad$ + heu '<-- Zielverzeichnis muss vorhanden sein
MKDIR ziel
MKDIR ziel + "\CNF"
CLS
dir = "DIR " + qpfad$ + "\PCNFG\*.txt /W /B /S > dat.tmp"
COLOR 10, 0
PRINT "1. Quelle ist: " + dir
SHELL dir
dir = "DIR " + qpfad$ + "\CNFG\*.txt /W /B /S >> dat.tmp"
PRINT "2. Quelle ist: " + dir
SHELL dir
fh = FREEFILE
OPEN "dat.tmp" FOR INPUT AS #fh 'Textdatei oeffnen
DO UNTIL EOF(fh)
LINE INPUT #fh, text
bef = "COPY " + text + " " + ziel + "\CNF"
SCREEN 12
LINE (100, 100)-(150, 200)
COLOR 14, 0
PRINT "Das Ziel ist: " + bef
SHELL bef
LOOP
CLOSE #fh
COLOR 7, 0
KILL "dat.tmp" |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 14.05.2013, 04:18 Titel: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
@dreael, Danke für ALLES,
- Ich habe "meine Hausaufgaben" gemacht und die Behandlung von
gleichnamigen Dateien aufgenommen. Zu dem habe ich
"aus der Not Tugend gemacht", in dem ich die temp Dateien
aus Berichte nutze.
- In der nächsten "Hausaufgabe" möchte ich die Pfade durch eine *.ini
editierbar machen, aber das ist ein anderes Thema.
Anbei die Hausaufgabe:
Code: | '*** Ausgewaehlte Dateien in Tagesordner sichern ***
DEFINT A-F
DEFSTR G-Z
DIM bef AS STRING
DIM dir AS STRING
CONST qpfad = "C:\V496\LSYS\"
CONST zpfad = "D:\"
heu = RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
qdat = "*.txt"
ziel = zpfad + heu
qtext = ziel + "\quelle.txt"
ztext = ziel + "\ziel.txt"
zver = ziel + "\CNF"
a = 0
b = 0
fh = FREEFILE
GOTO main:
mkziel:
MKDIR ziel
MKDIR zver
RETURN weiter
main:
SHELL "DIR D:\ /B /A:D > D:\dir.txt"
CLS
OPEN "D:\dir.txt" FOR INPUT AS #1
such = heu
found = 0
WHILE (NOT EOF(1) AND found = 0)
LINE INPUT #1, a$
apos = INSTR(LCASE$(a$), LCASE$(such))
IF (apos > 0) THEN found = 1
WEND
IF found = 0 THEN GOSUB mkziel: ELSE GOSUB weiter:
weiter:
CLOSE #1
KILL "D:\dir.txt"
qver = "CNFG\"
que = qpfad + qver + qdat
COLOR 10, 0
PRINT " 1. Quelle ist: "; que
SHELL "DIR " + que + " /W /B /S >" + qtext
qver = "PCNFG\"
que = qpfad + qver + qdat
COLOR 10, 0
PRINT " 2. Quelle ist: "; que
SHELL "DIR " + que + " /W /B /S >>" + qtext
COLOR 15
PRINT " Das Ziel ist: "; zver
COLOR 0, 7
PRINT " ACHTUNG! "
PRINT " Gleichnamige Dateien werden ueberschrieben! "
PRINT " Mit der richtigen Rheienfolge der Quellen, "
PRINT " kann man die richtige Datei behalten! "
PRINT " ********** "
SLEEP 3
COLOR 7, 0
CLS
OPEN qtext FOR INPUT AS #1 'QuellTextdatei oeffnen
DO UNTIL EOF(1)
LINE INPUT #1, text
bef = "COPY " + text + " " + zver
COLOR 14, 0
a = a + 1
PRINT "Nun wird "; a; "Datei kopiert: "; bef
OPEN ztext FOR APPEND AS #2 'ZielTextdatei oeffnen
PRINT #2, a; bef
CLOSE #2
SHELL bef
LOOP
CLOSE #1
SHELL "DIR " + zver + " /W /B /S > " + ztext
OPEN ztext FOR INPUT AS #fh 'Zielberichtdatei oeffnen
DO UNTIL EOF(fh)
LINE INPUT #fh, text
b = b + 1
LOOP
CLOSE #fh
IF a - b > 0 THEN
COLOR 12, 0
PRINT " Es wurden "; a - b; "Dateien ueberschrieben."
PRINT " Vergleiche "; ziel; "\bericht.txt"
SHELL "FC " + qtext + " " + ztext + " > " + ziel + "\bericht.txt"
COLOR 7, 0
GOTO kil
END IF
IF a = b THEN
PRINT " Es wurden "; b; "Dateien erfolgreich kopiert."
END IF
PRINT " Sollen die Berichte geloescht werden <j> /\ <n> & <CR>";
INPUT ber$
SELECT CASE ber$
CASE "j"
COLOR 12, 0
PRINT " Wirklich <j> /\ <n> & <CR>";
INPUT wir
SELECT CASE wir
CASE "j"
COLOR 7, 0
PRINT " Die Berichte wurden geloescht!"
GOTO kil
CASE "n"
GOTO ber
END SELECT
END
CASE "n"
ber:
COLOR 7, 0
PRINT " Die Berichte wurden aufgehoben."
END
END SELECT
COLOR 7, 0
kil:
KILL qtext
KILL ztext
COLOR 7, 0 |
- Bitte nicht sich, beim lesen, die Haare raufen.
Natürlich bin ich für Kritik und Optimierung dankbar. |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 27.07.2013, 01:28 Titel: Dateien aus Unbekannten Verzeichnissen kopieren |
|
|
Ich weiß, das ich versprochen habe die Variablen definieren zu können.
Anbei "die Lösung". Eine >tagIni.bat< mit folgendem Inhalt:
Code: | @REM -alte-Umgebungsvariablen-loeschen-
@CLS
@FOR %%a IN (QHV ZLW ZDIR UVA UVB QDAT ) DO SET %%a=
@REM -ArbeitsVerzeichnis-aufnehmen-
@SET WORK=D:\WORK
@SET PATH=%WORK%;%PATH%
@APPEND %WORK%\*.TXT;
@REM -QuelleHauptVerzeichnis-setzen-
SET QHV=P:
@REM -ZielLaufWerk-definieren-und-setzen-
SET zlw=D:\
@REM -ZielUntenVerzeichnise-definieren-
SET zdir=NEU
@REM -QuelleHauptVerzeichnis-definieren-
IF EXIST %QHV%\nul subst %QHV% /d
SUBST %QHV% c:\Test
@REM -QuelleUntenVerzeichnise-definieren-
SET UVA=ERSTE\
SET UVB=ZWEITE\
@REM -DateiTyp-definieren-
SET qdat=*.txt
@REM -Hauptprogram-aufrufen-
D:\DOS\Qbasic.exe /RUN %WORK%\TagSik.bas
@REM -Spuren-entfernen
@FOR %%a IN (QHV ZLW ZDIR UVA UVB QDAT WORK ) DO SET %%a=
SUBST P: /D |
- Die eigentliche >TagSik.bas< sieht nun wie folgt aus:
Code: | +----------------------TAGSIK.BAS----------------------+
' | ============ |
' |Funktion: Ausgewaehlte Dateien in Tagesordner sichern |
' |History: 07.06.2000/MOR Erste Ausfuehrung als *.bat |
' |Update: 26.07.2013/MOR |
' |Bem.: Diese *.bas wird ueber TagIni.bat aufgerufen|
' | in der die Variablen definiert werden! |
' +---------(c) Copyright ..bm-magic.. (D-97688)---------+
'
' +----------------------DANKSAGUNG----------------------+
' | ============ |
' |An: Das deutsche QBasic und FreeBASIC-Forum |
' | http://forum.qbasic.at/ |
' |Bes: nemored; dreael; HorstD; ThePuppetMaster; Jojo; |
' |An: QBasic.de Die deutsche QBasic-Seite |
' | http://www.qbasic.de |
' |Bes: Thomas Antonis |
' |Und: Programmieren fuer Oma |
' | www.askos.de |
' | Christof Schatz |
' +------------------------------------------------------+
DEFINT A-F
DEFSTR G-Z
DIM bef AS STRING
DIM dir AS STRING
zlw = ENVIRON$("ZLW")
qpfad = ENVIRON$("QHV") + "\"
heu = RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
zdir = ENVIRON$("ZDIR")
ziel = zlw + heu
zver = ziel + "\" + zdir
qdat = ENVIRON$("QDAT")
qtext = ziel + "\quelle.txt"
ztext = ziel + "\ziel.txt"
a = 0
b = 0
fh = FREEFILE
sdir = zlw
such = heu
CLS
GOSUB find
mheu:
MKDIR zlw + heu
IF sdir = zlw AND found > 0 THEN GOSUB fdir:
RETURN find
fdir:
sdir = zlw + heu
such = zdir
IF sdir = zlw + heu AND fpos = 0 THEN GOSUB mdir:
RETURN find
mdir:
MKDIR zlw + heu + "\" + zdir
RETURN find
find:
IF sdir = zlw + heu AND rueck = zdir THEN KILL zlw + "dir.txt"
IF sdir = zlw + heu AND rueck = zdir THEN GOTO main
SHELL "DIR " + sdir + " /B /A:D > " + zlw + "dir.txt"
OPEN zlw + "dir.txt" FOR INPUT AS #1
found = 0
WHILE (NOT EOF(1) AND found = 0)
LINE INPUT #1, a$
fpos = INSTR((a$), (such))
IF (fpos > 0) THEN found = 1
WEND
CLOSE #1
IF (found = 0) THEN rueck = "nicht": fpos = 0 ELSE rueck = a$
'PRINT "Im Pfad "; sdir; " wurde "; such; " als "; rueck; " gefunden."
IF sdir = zlw AND found = 0 THEN GOSUB mheu: ELSE GOSUB fdir
RETURN
main:
qver = ENVIRON$("UVA")
que = qpfad + qver + qdat
COLOR 10, 0
PRINT " 1. Quelle ist: "; que
SHELL "DIR " + que + " /W /B /S >" + qtext
qver = ENVIRON$("UVB")
que = qpfad + qver + qdat
COLOR 10, 0
PRINT " 2. Quelle ist: "; que
SHELL "DIR " + que + " /W /B /S >>" + qtext
COLOR 15
PRINT " Das Ziel ist: "; zver
COLOR 0, 7
PRINT " ACHTUNG! "
PRINT " Gleichnamige Dateien werden ueberschrieben! "
PRINT " Mit der richtigen Rheienfolge der Quellen, "
PRINT " kann man die richtige Datei behalten! "
PRINT " ********** "
SLEEP 4
COLOR 7, 0
CLS
OPEN qtext FOR INPUT AS #1 'QuellTextdatei oeffnen
DO UNTIL EOF(1)
LINE INPUT #1, text
bef = "COPY " + text + " " + zver
COLOR 14, 0
a = a + 1
PRINT "Nun wird "; a; "Datei kopiert: "; bef
OPEN ztext FOR APPEND AS #2 'ZielTextdatei oeffnen
PRINT #2, a; bef
CLOSE #2
SHELL bef
LOOP
CLOSE #1
SHELL "DIR " + zver + " /W /B /S > " + ztext
OPEN ztext FOR INPUT AS #fh 'Zielberichtdatei oeffnen
DO UNTIL EOF(fh)
LINE INPUT #fh, text
b = b + 1
LOOP
CLOSE #fh
IF a - b > 0 THEN
COLOR 12, 0
PRINT " Es wurden "; a - b; "Dateien ueberschrieben."
SHELL "FC " + qtext + " " + ztext + " > " + ziel + "\bericht.txt"
PRINT " Vergleiche "; ziel; "\bericht.txt"
SHELL "TYPE " + ziel + "\bericht.txt |more"
SLEEP 3
GOTO kil
END IF
IF a = b THEN
PRINT " Es wurden "; b; "Dateien erfolgreich kopiert."
END IF
PRINT " Sollen die Berichte geloescht werden <j> /\ <n> & <CR>";
INPUT loes
SELECT CASE loes
CASE "j"
COLOR 12, 0
PRINT " Wirklich <j> /\ <n> & <CR>";
COLOR 14, 0
INPUT wir
SELECT CASE wir
CASE "j"
GOTO kil
END
CASE "n"
GOTO ber
END
END SELECT
CASE "n"
ber:
PRINT " Die Berichte wurden aufgehoben."
COLOR 7, 0
GOTO ende
END
END SELECT
kil:
KILL qtext
KILL ztext
COLOR 7, 0
ende:
SYSTEM |
- Ich weiß, das es sicher einfacher geht, aber bei mir
funktioniert es. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|