Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Dateien aus Unbekannten Verzeichnissen kopieren.
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 83

BeitragVerfasst am: 23.03.2013, 01:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 23.03.2013, 17:27    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

- 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
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 24.03.2013, 03:00    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

- Die Config.sys hatte memmaker optimiert, leider ohne Erfolg.
- Gibt es möglich eine Einzelschritt Möglichkeit um das Problem einzugrenzen? traurig traurig
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 24.03.2013, 22:58    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

@HorstD - Ein unbeschreiblichen DANK - es geht lächeln lächeln lächeln
- 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 lächeln
[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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 25.03.2013, 23:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 26.03.2013, 02:11    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 26.03.2013, 23:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 27.03.2013, 01:37    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

- 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. lächeln
- 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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 27.03.2013, 13:51    Titel: Re: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 06.05.2013, 19:31    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

@dreael einen Riesen Dank, ich habe die Lösung: lächeln
- 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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 06.05.2013, 20:11    Titel: Re: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

[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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 07.05.2013, 21:32    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

@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 traurig )
- Gleiche Dateinamen kommen bei mir nicht vor,
aber ich werde es versuchen zu lösen.

- DANKE
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 08.05.2013, 17:51    Titel: Re: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

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
Code:
C:\>set

ü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
Code:
SET TEMP=C:\TEMP

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 08.05.2013, 22:17    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 14.05.2013, 04:18    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 27.07.2013, 01:28    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz