 |
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 |
alseppo
Anmeldungsdatum: 04.01.2006 Beiträge: 3
|
Verfasst am: 04.01.2006, 09:13 Titel: Befehl SHELL "RD /S /Q *Verzeichnis*" |
|
|
Hallo,
habe folgendes Problem:
Bei dem Befehl SHELL "RD /S /Q *Verzeichnis*" funktionieren die Parameter nicht...
es wirft immer den Fehler:
Unzulässige Option - /S
Erweiterter Fehler 183
Hintergrund:
Habe Windows XP SP1, will mir ein kleines Programm erstellen mit QBasic/FreeBasic um Dateien weg zu Sichern, auf meinen Server zu Übertragen und danach die Daten auf dem Client zu löschen..
Alles Funktioniert bis auf das löschen der Daten am Client...
Habe den Befehl "RD" mit den Parametern "/S für Unterverzeichnisse löschen" und "/Q ohne Bestätigung" gewählt weil es unter Windows ja den DELTREE nicht mehr gibt...
"RD" ohne den Parametern funktioniert nur wenn kein Unterverzeichnis vorhanden ist..
So schaut mein Quelltext aus...
SHELL "RD /S /Q DATA " (Data = das zu löschende Verzeichnis)
(Das Verzeichnis Data besitzt sehr viele Unter- und Verzeichnisse + Dateien)
Was kann ich tun?
PS: muss dazu sagen das mein Basic ein wenig eingerostet ist...hab die letzten 12 Jahre nix mehr gemacht
Gruß
Josi |
|
Nach oben |
|
 |
Manuel

Anmeldungsdatum: 23.10.2004 Beiträge: 1271 Wohnort: Bayern
|
Verfasst am: 04.01.2006, 12:04 Titel: |
|
|
Eine Möglichkeit wäre (mit Hilfe des DIR-Befehls in der CMD) zu überprüfen, ob Ordner vorhanden sind (am besten durch die Umleitung in eine Datei). Sind welche Vorhanden, müsste man in diesen Ordner wechseln, dort nach Ordnern überprüfen etc. bis man in ein Unterverzeichnis angelangt ist, in dem es keine weiteren Unterordner mehr gibt. Dann alle Dateien von diesem Ordner löschen, dann im Verzeichnis darüber den Ordner, bei dem man gerade alle Dateien gelöscht hat, den Ordner selber löschen. Dann noch überprüfen, ob sich weitere Unterordner im Ordner aufhalten... Dann wieder alles von vorne. Allerdings bräuchtest du erstens Kenntnisse im Bereich der Rekursion (Selbstaufruf), sonst wird's ein ellenlanger Code. Außerdem könnte es, je nach Verbindungsgeschwindigkeit zwischen Server und Client, das Löschen eines Ordners mit vielen Unterordnern ebenfalls lange dauern, da der Client beim Wechsel eines Ordners ja alle Dateinamen und deren Attribute zurückschicken muss.
Zugegeben, eine ziemlich langwierige Methode, die aber 100%ig funktioniert... Ich würde sie wählen, wenn es keine andere gäbe^^. _________________ DL Walk (Denkspiel) | DL Malek (Denkspiel) | DL Warrior (ASCII-Adventure) | DL Sokodos (Sokoban-Klon)
---
www.astorek.de.vu |
|
Nach oben |
|
 |
alseppo
Anmeldungsdatum: 04.01.2006 Beiträge: 3
|
Verfasst am: 04.01.2006, 12:33 Titel: |
|
|
Zitat: | Eine Möglichkeit wäre (mit Hilfe des DIR-Befehls in der CMD) zu überprüfen, ob Ordner vorhanden sind (am besten durch die Umleitung in eine Datei). Sind welche Vorhanden, müsste man in diesen Ordner wechseln, dort nach Ordnern überprüfen etc. bis man in ein Unterverzeichnis angelangt ist, in dem es keine weiteren Unterordner mehr gibt. Dann alle Dateien von diesem Ordner löschen, dann im Verzeichnis darüber den Ordner, bei dem man gerade alle Dateien gelöscht hat, den Ordner selber löschen. Dann noch überprüfen, ob sich weitere Unterordner im Ordner aufhalten... Dann wieder alles von vorne.
|
Dachte an sowas auch erst, habe aber das problem das wenn er alle Datei+Verzeichnisnamen eingelesen hat diese Datei dann 154k groß ist und er mir Überlauf meldet wenn ich diese einlesen will....
sind ca 5000 Dateien + Verzeichnisse...
gibts da noch nen anderen weg?
Mir wäre auch geholfen wenn meine *.bas später eine *.bat aufruft wo der "RD" Befehl funktioniert... Problem ist aber das er mir, wenn ich die *.bat über meine *.bas aufruf den gleichen Fehler zurückgibt wie wenns in der *bas steht... wenn *.bat manuel aufgerufen wird gehts
Habe das ganze mit dem FreeBasic v0.15b Compiler gemacht wg 32bit und so hat aber genauso wenig funktioniert wie QBasic 4.5...
Help![/quote] |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 04.01.2006, 13:14 Titel: |
|
|
Hallo.
Na dann kannst du die nicht alle in ein Array packen. Sammel am besten alles, was du löschen willst, in einer TMP Datei ("LOESCH.TMP") und dann machst du Folgendes:
Code: | CLS
OPEN "LOESCH.TMP" FOR INPUT AS #1
DO UNTIL EOF(1)
LINE INPUT #1, Zeile$
If Zeile$ <> "" THEN KILL Zeile$
LOCATE 1,1: PRINT STRING$(50," ")
LOCATE 1,1: PRINT Zeile$+" wurde gelöscht."
IF EOF(1) THEN EXIT DO
LOOP
CLOSE #1
KILL "LOESCH.TMP"
PRINT "Alles weg!"
SLEEP: END |
edit: Achso, du nutzt FB. Da können Arrays so groß sein wie du willst. Du hast dann sicherlich beim Dimensionieren eines Arrays was verkehrt gemacht. Poste am besten mal deinen Code.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
alseppo
Anmeldungsdatum: 04.01.2006 Beiträge: 3
|
Verfasst am: 05.01.2006, 09:09 Titel: |
|
|
Danke für die schnelle Hilfe...jetzt funktionierts
hatte zwischen Pfad und Parameter kein Leerzeichen
 |
|
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.
|
|