Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Anistasius
Anmeldungsdatum: 18.01.2006 Beiträge: 37
|
Verfasst am: 18.08.2006, 15:07 Titel: Dir() überschr. Speicherinhalte |
|
|
Der dir() Befehl überschreibt Speicherinhalte.
Folgender kleiner Test läßt sich unter 0.15 /0.16
sowohl bei Windows wie auch bei Linux reproduzieren.
' Testprogramm für dir----------
wonach$=""
wonach$=command$
kopie$=wonach$
print "Wonach:";wonach$
' Hier sollte die Paramteruebergabe angezeigt werden,
' es werden aber die Dateinamen angezeigt ?!?
print "Kopie:";kopie$
' Hier ebenfalls
maske$=wonach$
xx$= Dir(maske$, 1+2+4+32)
sleep
end
'-----------------------------------
Weiß jemand was da los ist?
Viele Grüße
Anistasius |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 18.08.2006, 17:47 Titel: |
|
|
ja,
du hast die Anführungszeichem bei der Parameterangabe vergessen.
Prog.exe "Parameter" _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Anistasius
Anmeldungsdatum: 18.01.2006 Beiträge: 37
|
Verfasst am: 18.08.2006, 21:08 Titel: |
|
|
Hi Volta,
hmmm, dann geht es, aber seit wann müssen bei einer Parameterübergabe Anführungszeichen eingegeben werden, um ein Überschreiben zu verhindern?
Wenn ich sie weg lasse, gibt er "Wonach:prog.bas prog.exe" aus.
D.h. die Variable wonach$ wird hier mit Daten überschrieben, mit denen sie überhaupt keinen Kontakt
hat und die zum Zeitpunkt des "Print" noch nichtmals im Ablauf existieren sollten.
Kann ich mir eigentlich nur so erklären, Wonach$ ist lediglich ein Verweis auf einen Bereich wo Command$ abgelegt ist.
Und dieser wird dann auch vom Dir Output überschrieben. Ich denke nicht das dies im Sinne des Erfinders ist
....Aber zumindest komme ich erstmal weiter. Vielen Dank für den Tipp!
Editiert:
Habe mich geirrt, nicht der Dir verhält sich eigenartig, sondern Command (*oder die heutigen Betriebssysteme).
Wenn er eine Parameterübergabe mit Wildcards bekommt, sucht er sich im vorauseilendem Gehorsam
Dateien dazu zusammen.
Wenn ich also "prog p*" aufrufe, beinhaltet command$ nicht "p*" sondern alle Dateinamen die er mit p findet.
Falls das beabsichtigt/unumgänglich ist, sollte man es aber mit die Beschreibung aufnehmen.
Viele Grüße
Anistasius
* Ich hatte 1993 so einen kleinen Zusatzbefehl für DOS verbreitet. "execu.exe" Wurde aufgerufen wie DOS Dir
legte aber die Pfad u. Dateinamen in Form von "&1 c:\pfad\datei &2 &3 &4" in einer Bat Datei ab.
Diese konnte man dann editieren und mit dem gewünschten Bearbeitungsbefehl starten.
Ideal um eine große Anzahl von Dateien zu bearbeiten. Da ich gerade >200 Bilder bearbeiten muß, wollte ich ihn rasch konvertieren, aber bei "execu ggcover*.jpg" kam nur krudes Zeug raus. Früher brauchte man keine Anführungszeichen. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 19.08.2006, 12:27 Titel: |
|
|
Hi,
warum ein Parameter ohne Anführungszeichen gleich als Ergebnis 'DIR Parameter' über den Command$ zurück gegeben wird kann ich dir auch nicht erklären.
Dieses Verhalten kannst du aber ausnutzen mit: Code: | Dim n As Integer
'mit 'prog.exe *.bas' Parameter ohne Anführungszeichen
'Command(0) liefert immer 'LW:\Pfad\progname.exe'
'Command(1 ... n) die nachfolgenden Parameter (hier alle bas-Dateinamen)
'Parameter mit Anführungszeichen prog.exe "*.bas"
'Command(0) wie oben ; Command(1) = *.bas ; sonst nichts
Do
?Command(n);" ";
n+=1
Loop Until Command(n)=""
Sleep | (Alles nur unter ME getestet, XP kann sich anders verhalten?)
Gruß Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 19.08.2006, 15:26 Titel: |
|
|
DIR()?
Was ist denn das für ein Befehl? _________________
Zitat: | 1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein. |
|
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 19.08.2006, 15:53 Titel: |
|
|
Der hier
Die Befehlsreferenz ist dein Freund! _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 19.08.2006, 16:00 Titel: |
|
|
Das weis ich selber!
Aber bei "D" habe ich nichts gefunden. _________________
Zitat: | 1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein. |
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
|
Nach oben |
|
 |
Anistasius
Anmeldungsdatum: 18.01.2006 Beiträge: 37
|
Verfasst am: 20.08.2006, 16:55 Titel: |
|
|
Habe es hinbekommen
Ohne Anführungszeichen aber mit optionalen Paramtern:
Anhängen= Die Script/Stapeldatei mit den Dateinamen und Platzhaltern wird dann nicht überschrieben
Zähler= Jede Zeile bekommt eine Nummer mit vorlaufenden Nummern.
Brauchbar wenn man ein Verzeichnis mit vielen Dateien (z.B. Bilder) hat, die alle
in eine gerordnete Namensstruktur gebracht werden sollen.
execu *.jpg -vn:3
Die Stapeldatei könnte dann so aussehen.
&1 meinfoto031004.jpg &2 &3 001 &4
&1 urlaub22.jpg &2 &3 002 &4
&1 urlaub24.jpg &2 &3 003 &4
&1 meinfoto67.jpg &2 &3 004 &4
usw.
Nach etwas "suchen/ersetzen" im Editor, siehts dann vielleicht so aus:
copy meinfoto031004.jpg /fotos2003/urlaub001.jpg
copy urlaub22.jpg /fotos2003/urlaub002.jpg
copy urlaub24.jpg /fotos2003/urlaub003.jpg
copy meinfoto67.jpg /fotos2003/urlaub004.jpg
Eine andere Anwendung ist die Stapeldatei (heißt immer "exegen") gleich mit einem Programm zu starten.
z.B.
exegen.bat scalpic 400 300
Wenn die Zeile so aussieht: %1 meinfoto67.jpg %2 %3 %4
würde er sie so aufrufen: scalpic meinfoto67.jpg 400 300
Löppt unter Linux und Windows/Dos (Win98 getestet)
Wer es haben möchte (6KB) :
http://www.anistasius.de/execu.bas
Ist manchmal ziemlich nützlich.
Viele Grüße
Anistasius |
|
Nach oben |
|
 |
|