Discussion:
"eigenen" Speicherort abfragen
(zu alt für eine Antwort)
Andreas Hess
2010-03-05 11:22:16 UTC
Permalink
Hallo,

kann man mit einer Batch-Datei abfragen, wie der Pfad zu ihrem eigenen
Speicherort heißt?

Ich würde gerne mittels der Bat-Datei automatisch eine dritte Datei in
den gleichen Ordner kopieren, in dem die Bat liegt. Geht sowas?

Vielen Dank für Antworten schon jetzt!!!

Grüße aus Stuttgart,
Andreas
Werner Flügel
2010-03-05 11:29:16 UTC
Permalink
Post by Andreas Hess
Hallo,
kann man mit einer Batch-Datei abfragen, wie der Pfad zu ihrem eigenen
Speicherort heißt?
Ich würde gerne mittels der Bat-Datei automatisch eine dritte Datei in
den gleichen Ordner kopieren, in dem die Bat liegt. Geht sowas?
copy \from\somewhere\that\file .

Gruß

Werner
--
+----------------------------------------------------+
| Wollen Sie Laufwerk C: wirklich formatieren? |
| [J]etzt nicht [N]atürlich [A]lle anderen auch! |
+----------------------------------------------------+
Werner Flügel
2010-03-05 11:44:22 UTC
Permalink
Post by Werner Flügel
Post by Andreas Hess
Hallo,
kann man mit einer Batch-Datei abfragen, wie der Pfad zu ihrem eigenen
Speicherort heißt?
Ich würde gerne mittels der Bat-Datei automatisch eine dritte Datei in
den gleichen Ordner kopieren, in dem die Bat liegt. Geht sowas?
copy \from\somewhere\that\file .
Nachtrag: klappt natürlich nur, wenn du die Batch nicht aus einem
anderen Verzeichnis aufrufst, also so: \Pfad\zur\batch.bat klappts nicht!
--
+----------------------------------------------------+
| Wollen Sie Laufwerk C: wirklich formatieren? |
| [J]etzt nicht [N]atürlich [A]lle anderen auch! |
+----------------------------------------------------+
Andrej Kluge
2010-03-05 17:26:54 UTC
Permalink
Post by Werner Flügel
Post by Werner Flügel
Post by Andreas Hess
kann man mit einer Batch-Datei abfragen, wie der Pfad zu ihrem
eigenen Speicherort heißt?
copy \from\somewhere\that\file .
Nachtrag: klappt natürlich nur, wenn du die Batch nicht aus einem
anderen Verzeichnis aufrufst, also so: \Pfad\zur\batch.bat klappts nicht!
Eben. Warum nicht am Anfang der Datei eine Umgebungsvariable setzen

set currentdir=.

und dann später "currentdir" verwenden?

Ciao
AK
Hans-Bernhard Bröker
2010-03-05 19:25:45 UTC
Permalink
Post by Andrej Kluge
Eben. Warum nicht am Anfang der Datei eine Umgebungsvariable setzen
set currentdir=.
und dann später "currentdir" verwenden?
Vor allem deshalb, weil das _so_ überhaupt nicht funktioniert.
Stefan Reuther
2010-03-05 17:38:52 UTC
Permalink
Post by Andreas Hess
kann man mit einer Batch-Datei abfragen, wie der Pfad zu ihrem eigenen
Speicherort heißt?
In %0 findest du den Namen, mit dem die Datei aufgerufen wurde. Damit
kannst du jetzt anfangen zu spielen.

Unter Windows XP bekommst du z.B. mit '%~dp0' den Pfad, an den du nur
noch einen Dateinamen anzuhängen brauchst.

Unter DOS geht das meines Wissens nach mit Bordmitteln nicht. Immerhin
musst du ja auch den %PATH% durchsuchen, falls die Batchdatei über
selbigen aufgerufen wurde.


Stefan
Dirk Wolfgang Glomp
2010-03-06 10:06:05 UTC
Permalink
Post by Stefan Reuther
Post by Andreas Hess
kann man mit einer Batch-Datei abfragen, wie der Pfad zu ihrem eigenen
Speicherort heißt?
Unter DOS geht das meines Wissens nach mit Bordmitteln nicht. Immerhin
musst du ja auch den %PATH% durchsuchen, falls die Batchdatei über
selbigen aufgerufen wurde.
Logisch gibt es unter DOS solche Bordmittel, allerding befinden die sich
nicht oben auf dem Sonnendeck unseres Traumschiffes, sondern tief unten
im Maschienenraum. Den %PATH% braucht man dafür allerdings nicht zu
durchsuchen. Mit zwei dafür vorgesehenen Soft-IRQs kann man ggf. mit
Hilfe von Debug auch innerhalb einer Batchdatei die momentane Position
genau bestimmen.

Siehe dazu auch Ralf Browns Interrupt List:
http://www.pobox.com/~ralf
http://www.pobox.com/~ralf/files.html
ftp://ftp.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/

RBIL->inter61b.zip->INTERRUP.F
--------D-2119-------------------------------
INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
AH = 19h
Return: AL = drive (00h = A:, 01h = B:, etc)
Note: Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this
call from a particular location every time it starts a command to
determine when to issue an automatic EOJ
SeeAlso: AH=0Eh,AH=47h,AH=BBh
....
--------D-2147-------------------------------
INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
AH = 47h
DL = drive number (00h = default, 01h = A:, etc)
DS:SI -> 64-byte buffer for ASCIZ pathname
Return: CF clear if successful
AX = 0100h (undocumented)
CF set on error
AX = error code (0Fh) (see #01680 at AH=59h/BX=0000h)
Notes: the returned path does not include a drive or the initial backslash
many Microsoft products for Windows rely on AX being 0100h on success
under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
SeeAlso: AH=19h,AH=3Bh,AH=71h,INT 15/AX=DE25h

Dirk
Stefan Reuther
2010-03-06 11:46:39 UTC
Permalink
Post by Dirk Wolfgang Glomp
Post by Stefan Reuther
Post by Andreas Hess
kann man mit einer Batch-Datei abfragen, wie der Pfad zu ihrem eigenen
Speicherort heißt?
Unter DOS geht das meines Wissens nach mit Bordmitteln nicht. Immerhin
musst du ja auch den %PATH% durchsuchen, falls die Batchdatei über
selbigen aufgerufen wurde.
Logisch gibt es unter DOS solche Bordmittel, allerding befinden die sich
nicht oben auf dem Sonnendeck unseres Traumschiffes, sondern tief unten
im Maschienenraum. Den %PATH% braucht man dafür allerdings nicht zu
durchsuchen.
[...]
Post by Dirk Wolfgang Glomp
INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
Das nutzt dir überhaupt nichts. *Diese* Information würde man auch mit
dem 'cd'-Befehl bekommen. Nur haben die nichts mit dem Speicherort der
Batchdatei zu tun, wenn diese über den %PATH% oder durch Angabe des
kompletten Speicherortes aufgerufen wurde.
c:\eins> c:\zwei\foo.bat

Dann bleibt einem nur, den Suchalgorithmus des Kommandozeileninter-
preters zu duplizieren. Windows XP (und sicherlich auch seine
genetischen Vorgänger) haben das mit '%~dp0' eingebaut. Für alle anderen
müsste man ein Programm schreiben. Auch wenn man das prinzipiell mit
einem "Debug-Script" hinbekommen würde, bezeichne zumindest ich das dann
nicht mehr als "Bordmittel".


Stefan
Dirk Wolfgang Glomp
2010-03-06 12:56:17 UTC
Permalink
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Post by Stefan Reuther
Post by Andreas Hess
kann man mit einer Batch-Datei abfragen, wie der Pfad zu ihrem eigenen
Speicherort heißt?
Unter DOS geht das meines Wissens nach mit Bordmitteln nicht. Immerhin
musst du ja auch den %PATH% durchsuchen, falls die Batchdatei über
selbigen aufgerufen wurde.
Logisch gibt es unter DOS solche Bordmittel, allerding befinden die sich
nicht oben auf dem Sonnendeck unseres Traumschiffes, sondern tief unten
im Maschienenraum. Den %PATH% braucht man dafür allerdings nicht zu
durchsuchen.
[...]
Post by Dirk Wolfgang Glomp
INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
Das nutzt dir überhaupt nichts.
Na sicher doch, wenn die betreffende Batchdatei dort gestartet wird wo sie
sich befindet.
Post by Stefan Reuther
*Diese* Information würde man auch mit
dem 'cd'-Befehl bekommen. Nur haben die nichts mit dem Speicherort der
Batchdatei zu tun, wenn diese über den %PATH% oder durch Angabe des
kompletten Speicherortes aufgerufen wurde.
c:\eins> c:\zwei\foo.bat
Diese Einschränkung wurde ebensowenig als Bedingung vorgegeben wie etwa
mögliche Netzwerkverbindungen. Wenn die Batchdatei also an ihrem Ort
direckt gestartet wird braucht man keine Pfadangaben aus %PATH%, oder eine
spezielle Laufwerk+Pfadangabe zum Starten der Batchdatei.
Davon war auch nicht die Rede. Lese bitte die Frage noch einmal genau
durch, bevor du von dir selbst auferlegten Einschränkungen ausgehst die gar
nicht Gegenstand der Frage waren.
Post by Stefan Reuther
Auch wenn man das prinzipiell mit
einem "Debug-Script" hinbekommen würde, bezeichne zumindest ich das dann
nicht mehr als "Bordmittel".
So ein Debug-Script wohl nicht, aber Debug und alle Soft-IRQs die DOS
mit bringt sind DOS-Bordmittel, was denn sonst?

Dirk
Ulrich F. Heidenreich
2010-03-06 13:51:49 UTC
Permalink
Post by Dirk Wolfgang Glomp
Na sicher doch, wenn die betreffende Batchdatei dort gestartet wird wo sie
sich befindet.
[..]
Post by Dirk Wolfgang Glomp
Diese Einschränkung wurde ebensowenig als Bedingung vorgegeben
IMHO implizit schon. Wenn man sie dort startet, wo sie sich befindet,
erübrigt sich ja die Suche nach ihrem Speicherort.

Mein Lösungsansatz wäre - vorausgesetzt, ihr Name ist eindeutig und
man weiß zumindest ihren Laufwerksbuchstaben - jener:

dir c:\*.bat /s /b /v | find "%0"

liefert schonmal den gesamten Pfad zur Batch-Datei, in der diese Zeile
steht. Mit EDLIN kann man dann den Pfadnamen extrahieren, indem man
aus dem Ergebnis den Dateinamen (der steht in %0) herausoperiert.

Leider hat auch das den Schönheitsfehler, daß "%0" manchmal nur den
Dateinamen und manchmal bereits den vollen Dateinamen inklusiv Pfad
liefert (Im letzten Fall findet find dann nichts). Weiß hier jemand
*genau*, wann und wann nicht? Ich komme da auf keinen grünen Zweig.

CU!
Ulrich

P.S.: "DOS" ist hier das letzte "echte"[TM] DOS, welches sich unter
Win9x verbirgt.
Dirk Wolfgang Glomp
2010-03-06 14:34:02 UTC
Permalink
Post by Ulrich F. Heidenreich
Post by Dirk Wolfgang Glomp
Na sicher doch, wenn die betreffende Batchdatei dort gestartet wird wo sie
sich befindet.
[..]
Post by Dirk Wolfgang Glomp
Diese Einschränkung wurde ebensowenig als Bedingung vorgegeben
IMHO implizit schon. Wenn man sie dort startet, wo sie sich befindet,
erübrigt sich ja die Suche nach ihrem Speicherort.
Der Ort könnte sich aber verändert haben wenn man die Batch mal wo anders
hin kopiert hat und dann die dann ohne Anpassung dort ebenfalls arbeiten
soll.
Post by Ulrich F. Heidenreich
Mein Lösungsansatz wäre - vorausgesetzt, ihr Name ist eindeutig und
dir c:\*.bat /s /b /v | find "%0"
Mit IRQ21/AH=19 kann man den aktuellen Laufwerksbuchtaben ermitteln.
Post by Ulrich F. Heidenreich
liefert schonmal den gesamten Pfad zur Batch-Datei, in der diese Zeile
steht. Mit EDLIN kann man dann den Pfadnamen extrahieren, indem man
aus dem Ergebnis den Dateinamen (der steht in %0) herausoperiert.
....uaaah EDLIN wie grausam...
Post by Ulrich F. Heidenreich
Leider hat auch das den Schönheitsfehler, daß "%0" manchmal nur den
Dateinamen und manchmal bereits den vollen Dateinamen inklusiv Pfad
liefert (Im letzten Fall findet find dann nichts). Weiß hier jemand
*genau*, wann und wann nicht? Ich komme da auf keinen grünen Zweig.
Es ist auch möglich über FCB alle Ordner nach einer bestimmten Dateinamen
zu durchsuchen.

Dirk
Ulrich F. Heidenreich
2010-03-06 15:18:21 UTC
Permalink
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Mein Lösungsansatz wäre - vorausgesetzt, ihr Name ist eindeutig und
dir c:\*.bat /s /b /v | find "%0"
Mit IRQ21/AH=19 kann man den aktuellen Laufwerksbuchtaben ermitteln.
Und der *aktuelle* Laufwerksbuchstabe gibt genau welche Informationen
darüber, auf welchem Laufwerk sich die Batchdatei befindet?
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
liefert schonmal den gesamten Pfad zur Batch-Datei, in der diese Zeile
steht. Mit EDLIN kann man dann den Pfadnamen extrahieren, indem man
aus dem Ergebnis den Dateinamen (der steht in %0) herausoperiert.
....uaaah EDLIN wie grausam...
Nenne mir andere DOS-Bordmittel, um aus "C:\pfad\dateiname" den
"C:\pfad" zu extrahieren.
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Leider hat auch das den Schönheitsfehler, daß "%0" manchmal nur den
Dateinamen und manchmal bereits den vollen Dateinamen inklusiv Pfad
liefert (Im letzten Fall findet find dann nichts). Weiß hier jemand
*genau*, wann und wann nicht? Ich komme da auf keinen grünen Zweig.
Es ist auch möglich über FCB alle Ordner nach einer bestimmten Dateinamen
zu durchsuchen.
Es ist auch möglich, sich eine Frikadelle ans Knie zu nageln.

Wie wär's stattdessen mit einer Hilfe zu dem Symptom, daß ein "echo %0"
mal nur den Dateinamen und mal den kompletten Pfad liefert? Wenn es
*immer* Letzteres täte, wäre des OPs Aufgabe ja gelöst ...

CU!
Ulrich
--
In 9 Monaten und 19 Tagen ist Weihnachten
http://invalid.de/spank-the-mugu.html
http://invalid.de/phunnyphish.jpg
Stellt euch vor, es ist Samstag und keiner geht hin!
Dirk Wolfgang Glomp
2010-03-06 16:31:23 UTC
Permalink
Post by Ulrich F. Heidenreich
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Mein Lösungsansatz wäre - vorausgesetzt, ihr Name ist eindeutig und
dir c:\*.bat /s /b /v | find "%0"
Mit IRQ21/AH=19 kann man den aktuellen Laufwerksbuchtaben ermitteln.
Und der *aktuelle* Laufwerksbuchstabe gibt genau welche Informationen
darüber, auf welchem Laufwerk sich die Batchdatei befindet?
Man kann die Batch-Datei wo anders hinkopieren und auch dort starten.
Wo ist dein Problem?
Post by Ulrich F. Heidenreich
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
liefert schonmal den gesamten Pfad zur Batch-Datei, in der diese Zeile
steht. Mit EDLIN kann man dann den Pfadnamen extrahieren, indem man
aus dem Ergebnis den Dateinamen (der steht in %0) herausoperiert.
....uaaah EDLIN wie grausam...
Nenne mir andere DOS-Bordmittel, um aus "C:\pfad\dateiname" den
"C:\pfad" zu extrahieren.
Ich habe dir doch erklärt das die Bordmittel von DOS sich auch unter der
Haube befinden und die wenigen DOS-Befehle nur einen Teil des gesamten DOS
darstellen. Ich könnte ja noch akzeptieren wenn du die BIOS-Routinen nicht
zu den Bordmitteln von DOS dazu zählst, aber jedes Byte das DOS selber
mitbringt und alles was man damit machen kann gehört definitiv auch zu den
Bordmitteln von DOS.
Post by Ulrich F. Heidenreich
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Leider hat auch das den Schönheitsfehler, daß "%0" manchmal nur den
Dateinamen und manchmal bereits den vollen Dateinamen inklusiv Pfad
liefert (Im letzten Fall findet find dann nichts). Weiß hier jemand
*genau*, wann und wann nicht? Ich komme da auf keinen grünen Zweig.
Es ist auch möglich über FCB alle Ordner nach einer bestimmten Dateinamen
zu durchsuchen.
Es ist auch möglich, sich eine Frikadelle ans Knie zu nageln.
Glaubst du wenn du hier herumkasperst wird deine Sichtweise dadurch
uns besser offenbart?
Post by Ulrich F. Heidenreich
Wie wär's stattdessen mit einer Hilfe zu dem Symptom, daß ein "echo %0"
mal nur den Dateinamen und mal den kompletten Pfad liefert? Wenn es
*immer* Letzteres täte, wäre des OPs Aufgabe ja gelöst ...
Wenn du eine Lösung propagierst dann zeige uns doch bitte auch den
möglichen Lösungsweg, denn mit Herumblödeln ist hier Keinem wirklich
geholfen. Ich habe bereits einen für die wenig spezifizierte Frage
passenden Lösungsansatz aufgezeit, der mit Sicherheit zum Erfolg führen
kann, wenn man sich die Mühe macht. Dein "täte, wäre, wenn" war hier
weniger hilfreich.

Dirk
Ulrich F. Heidenreich
2010-03-06 17:15:52 UTC
Permalink
Post by Dirk Wolfgang Glomp
Man kann die Batch-Datei wo anders hinkopieren und auch dort starten.
Wo ist dein Problem?
Meins? Ich orientiere mich eher am "Problem" des OPs, welches wohl "Wie
kann eine Batchdatei feststellen, in welchem Pfad sie gestartet wurde?"
lautete.
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Wie wär's stattdessen mit einer Hilfe zu dem Symptom, daß ein "echo %0"
mal nur den Dateinamen und mal den kompletten Pfad liefert? Wenn es
*immer* Letzteres täte, wäre des OPs Aufgabe ja gelöst ...
Wenn du eine Lösung propagierst
Meine Lösung setzte auf "%0" auf. Allerdings scheint sie daran zu
scheitern, daß "%0" keine reproduzierbare Ergebnisse liefert.

CU!
Ulrich
--
In 9 Monaten und 19 Tagen ist Weihnachten
http://invalid.de/spank-the-mugu.html
http://invalid.de/phunnyphish.jpg
Stellt euch vor, es ist Samstag und keiner geht hin!
Dirk Wolfgang Glomp
2010-03-07 09:21:48 UTC
Permalink
Post by Ulrich F. Heidenreich
Post by Dirk Wolfgang Glomp
Man kann die Batch-Datei wo anders hinkopieren und auch dort starten.
Wo ist dein Problem?
Meins? Ich orientiere mich eher am "Problem" des OPs, welches wohl "Wie
kann eine Batchdatei feststellen, in welchem Pfad sie gestartet wurde?"
lautete.
Und wenn sie dort gestartet wurde wo sie momentan hinkopiert wurde,
kann man ohne Änderungen Ermittleln wo sie sich befindet.
Post by Ulrich F. Heidenreich
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Wie wär's stattdessen mit einer Hilfe zu dem Symptom, daß ein "echo %0"
mal nur den Dateinamen und mal den kompletten Pfad liefert? Wenn es
*immer* Letzteres täte, wäre des OPs Aufgabe ja gelöst ...
Wenn du eine Lösung propagierst
Meine Lösung setzte auf "%0" auf. Allerdings scheint sie daran zu
scheitern, daß "%0" keine reproduzierbare Ergebnisse liefert.
Das ist natürlich unbefriedigend.

Dirk
Herbert Kleebauer
2010-03-06 17:41:36 UTC
Permalink
Post by Ulrich F. Heidenreich
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Mein Lösungsansatz wäre - vorausgesetzt, ihr Name ist eindeutig und
dir c:\*.bat /s /b /v | find "%0"
Da der OP vermutlich ein XP+ benutzt ist das Problem wohl gar
nicht vorhanden, aber in echtem DOS würde ich zuerst %0 in
seine vier Bestandteile zerlegen:

Laufwerk, Pfad, Name und Erweiterung

Falls Laufwerk/Pfad nich leer sind, ist der Ort gefunden.
Ansonsten nach Name.bat suchen:

if exist %nam%.bat echo .\%nam%.bat
for %%i in (%PATH%) do if exist %%i\%nam%.bat echo %%i\%nam%.bat
Post by Ulrich F. Heidenreich
Post by Dirk Wolfgang Glomp
....uaaah EDLIN wie grausam...
Nenne mir andere DOS-Bordmittel, um aus "C:\pfad\dateiname" den
"C:\pfad" zu extrahieren.
Soweit ich mich erinnere, war EDLIN zwar bei NT und W2k aber
nicht bei DOS6 oder DOS7 (Win98) dabei.

Hier eine 15 Jahre alte batch Datei die die Zerlegung macht
(das waren noch Zeiten, da hab ich noch von Hand Assembler-
programme geschrieben, die nur opcodes im ASCII-Bereich
enthalten):

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

@echo off
set x=%1

if exist s_r.com goto l0
echo j_^h`0X-//***@X(E4(E8(EE(EP(EU(E](Eb,`,`0E50EB(EJ0EMYP>s_r.com
echo "X(Ee0Ef(Ei0EsQI[SZR2T!JJJxGh06X500ZRC2P$:U=tDM!u1Q[QP>>s_r.com
echo "XZM!td8D#uwQZM!tY:E=tTPZC:]5sL8T$t(KyeM!xaCSX5``5`,M!>>s_r.com
:l0

set drv=
set pat=
set ext=

echo .%x%| s_r.com .:set drv=>s_r.bat
if not errorlevel 1 goto l1
echo.>>s_r.bat
echo %x%| s_r.com :,set x=>> s_r.bat
echo.>>s_r.bat
call s_r.bat

:l1
echo .%x%|s_r.com .\set pat=%pat%> s_r.bat
if not errorlevel 1 goto l2
echo \>>s_r.bat
echo %x%| s_r.com \,set x=>> s_r.bat
echo.>>s_r.bat
call s_r.bat
goto l1

:l2
echo .%x%| s_r.com ..set nam=> s_r.bat
if not errorlevel 1 goto l3
echo.>>s_r.bat
echo %x%| s_r.com ..set ext=>> s_r.bat

:l3
echo.>>s_r.bat
call s_r.bat

echo drive= %drv%
echo path = %pat%
echo file = %nam%
echo ext = %ext%
Post by Ulrich F. Heidenreich
Wie wär's stattdessen mit einer Hilfe zu dem Symptom, daß ein "echo %0"
mal nur den Dateinamen und mal den kompletten Pfad liefert? Wenn es
*immer* Letzteres täte, wäre des OPs Aufgabe ja gelöst ...
Steht in %0 nicht genau der Aufruf des Programms, d.h. mit Pfad
falls der Pfad im Aufruf angegeben wurde und sonst halt ohne?
Oder kannst du ein gegenbeispiel geben.


Hier noch der Sourcecode des Assemblerprogramms:

; liest von der cmdline die 2 Zeichen: ANF und END (die ersten
; beiden Zeichen nach dem ersten blank nach dem Programmnamen).
; Die restlichen Zeichen der cmdline werden auf stdout ausgegeben.
; Anschliessend werden Zeichen von stdin gelesen, bis das Zeichen ANF
; kommt. Alle darauf folgenden Zeichen werden nach stdout
; ausgegeben, bis Zeichen END oder CR oder EOF kommt. Dieses Zeichen
; wird nicht mehr ausgegeben. Die Anzahl der END-Zeichen zwischen
; dem ANF-Zeichen und CR bzw. EOF wird als errorlevel ausgegeben.


@=$100
moveq.w #$5f,-(sp)
move.w (sp)+,r5 ; r5=$5f

move.w #$3060,-(sp)
move.w (sp)+,r0
sub.w #$3060-$131,r0
move.w r0,-(sp)
move.w (sp)+,r6 ; r6=$131

moveq.w #$40,-(sp)
move.w (sp)+,r0 ; r0=$40
sub.b r0,b1+1-$131.b(r6.w)
sub.b r0,b2+1-$131.b(r6.w)
sub.b r0,b3+1-$131.b(r6.w)
sub.b r0,b4+1-$131.b(r6.w)
sub.b r0,b5+1-$131.b(r6.w)
sub.b r0,b6+1-$131.b(r6.w)
sub.b r0,b7+1-$131.b(r6.w)
sub.b #$60,r0
sub.b #$60,r0 ; r0=$80
eor.b r0,c1-$131.b(r6.w)
eor.b r0,c2-$131.b(r6.w)
sub.b r0,c3+1-$131.b(r6.w)
eor.b r0,c4-$131.b(r6.w)

move.w (sp)+,r2 ; r2=0

move.w r0,-(sp)
or.w #$220a,r0 ; crlf
move.w (sp)+,r0

sub.b r0,c5+1-$131.b(r6.w)
eor.b r0,c6-$131.b(r6.w)
sub.b r0,c7+1-$131.b(r6.w)
eor.b r0,c8-$131.b(r6.w)

move.w r2,-(sp)
dec.w r2 ; r2=-1

move.w (sp)+,r3 ; r3=0
move.w r3,-(sp)
move.w (sp)+,r1 ; r1=0
move.w r1,-(sp)
eor.b $21.b(r5.w),r1 ; cmdline length
dec.w r1
dec.w r1
dec.w r1
bmi.b g5 ; at least 3 byte
move.w #$3630,-(sp)
move.w (sp)+,r0
eor.w #$3030,r0 ; r0=$0600
g1: move.w (sp)+,r1 ; r1=0
move.w r1,-(sp)
inc.w r3
eor.b $24.b(r3.w,r5.w),r1 ; next byte from cmdline
cmp.b a1-$131.b(r6.w),r1 ; = CR ?
b1: beq.b g2+$40
c1: dc.b $cd^$80,$21 ; trap #$21
b2: bne.b g1+$40 ; bne = br

g2: move.w r2,-(sp)
move.w (sp)+,r3 ; r3=-1
move.w r2,-(sp)

move.w r0,-(sp)
a1: or.w #$220a,r0 ; crlf
move.w (sp)+,r0

move.w (sp)+,r1 ; r1=-1

g3: c2: dc.b $cd^$80,$21 ; trap #$21
b3: beq.b g5+$40 ; no more char

cmp.b r0,$23.b(r5.w) ; = START char
c3: bne.b g3+$80

g4: move.w r2,-(sp)
move.w (sp)+,r1 ; r1=-1
c4: dc.b $cd^$80,$21 ; trap #$21
b4: beq.b g5+$40 ; no more char
cmp.b a1-$131.b(r6.w),r0 ; = CR
b5: beq.b g5+$40

move.w r0,-(sp)
move.w (sp)+,r1
inc.w r3 ; suppose END char
cmp.b c1-$131.b(r6.w),r3 ; max $4c END char
b6: bhs.b g5+$40
cmp.b r1,$24.b(r5.w) ; = END char
b7: beq.b g4+$40
dec.w r3 ; was not END char
c5: bpl.b g4+$80 ; don't write after 1. END char
c6: dc.b $cd^$80,$21 ; trap #$21
c7: bmi.b g4+$80 ; bmi = br

g5: inc.w r3
move.w r3,-(sp)
move.w (sp)+,r0
eor.w #$6060,r0
eor.w #$2c60,r0 ; AH=$4c
c8: dc.b $cd^$80,$21 ; trap #$21
Ulrich F. Heidenreich
2010-03-07 08:56:54 UTC
Permalink
Post by Herbert Kleebauer
Post by Ulrich F. Heidenreich
Post by Ulrich F. Heidenreich
Mein Lösungsansatz wäre - vorausgesetzt, ihr Name ist eindeutig und
dir c:\*.bat /s /b /v | find "%0"
Da der OP vermutlich ein XP+ benutzt ist das Problem wohl gar
nicht vorhanden,
Gerade in XP hatte ich ein ähnliches Problem:

Ein "MOVE C:\pfad\datei ." verschob unter "normalem" Windows in das
Verzeichnis, in dem die Batchdatei obigen Inhalts stand; unter XP
dagegen in das Home-Verzeichnis des Users.
Post by Herbert Kleebauer
aber in echtem DOS würde ich zuerst %0 in
Laufwerk, Pfad, Name und Erweiterung
*wenn* die alle in %0 stehen, relativiert sich das auf das Entfernen
des - als bekannt implizierten - Namens der Batchdatei.
Post by Herbert Kleebauer
Post by Ulrich F. Heidenreich
Wie wär's stattdessen mit einer Hilfe zu dem Symptom, daß ein "echo %0"
mal nur den Dateinamen und mal den kompletten Pfad liefert? Wenn es
*immer* Letzteres täte, wäre des OPs Aufgabe ja gelöst ...
Steht in %0 nicht genau der Aufruf des Programms, d.h. mit Pfad
falls der Pfad im Aufruf angegeben wurde und sonst halt ohne?
Oder kannst du ein gegenbeispiel geben.
Unter Win 9x angeklickt steht darin der volle Pfad.
Unter DOS aufgerufen tatsächlich der Aufruf.
Gestern hatte ich aber auch einmal den vollen Pfad drin stehen.
Heute dagegen nicht reproduzierbar.

CU!
Ulrich
--
In 9 Monaten und 18 Tagen ist Weihnachten
http://invalid.de/spank-the-mugu.html
http://invalid.de/phunnyphish.jpg
Stellt euch vor, es ist Sonntag und keiner geht hin!
Stefan Reuther
2010-03-07 11:27:06 UTC
Permalink
Post by Ulrich F. Heidenreich
Post by Herbert Kleebauer
Post by Ulrich F. Heidenreich
Mein Lösungsansatz wäre - vorausgesetzt, ihr Name ist eindeutig und
dir c:\*.bat /s /b /v | find "%0"
Da der OP vermutlich ein XP+ benutzt ist das Problem wohl gar
nicht vorhanden,
Ein "MOVE C:\pfad\datei ." verschob unter "normalem" Windows in das
Verzeichnis, in dem die Batchdatei obigen Inhalts stand; unter XP
dagegen in das Home-Verzeichnis des Users.
Wenn du die grafische Benutzeroberfläche benutzt, ist das aktuelle
Verzeichnis eben das, welches selbige gerade eingestellt hat. Mithilfe
einer Verknüpfung kann man der grafischen Oberfläche auf die Sprünge helfen.

Das ist doch mit reinen DOS-Oberflächen auch nicht anders. Wenn du im
Norton Commander eine Batch-Datei per Point+Click startest, sieht sie
als aktuelles Verzeichnis das, in dem sie gespeichert ist (weil sie aus
diesem Verzeichnis gepointet und geclickt wurde); wenn du sie in die
Menüauswahl einträgst, dann nicht (weil es da keine Magie gibt, die das
aktuelle Verzeichnis mal eben wechselt).
Post by Ulrich F. Heidenreich
Post by Herbert Kleebauer
Steht in %0 nicht genau der Aufruf des Programms, d.h. mit Pfad
falls der Pfad im Aufruf angegeben wurde und sonst halt ohne?
Oder kannst du ein gegenbeispiel geben.
Unter Win 9x angeklickt steht darin der volle Pfad.
Unter DOS aufgerufen tatsächlich der Aufruf.
Weil die GUI eben grundsätzlich Aufrufe mit vollem Pfad generiert.
Du kannst auch unter DOS grundsätzlich alles über seinen vollen Pfad
aufrufen, aber ich nehme an, du wirst wie alle DOS-Nutzer dazu zu
tippfaul sein :-)


Stefan
Ulrich F. Heidenreich
2010-03-07 13:22:44 UTC
Permalink
[..]
Post by Stefan Reuther
Post by Ulrich F. Heidenreich
Ein "MOVE C:\pfad\datei ." verschob unter "normalem" Windows in das
Verzeichnis, in dem die Batchdatei obigen Inhalts stand; unter XP
dagegen in das Home-Verzeichnis des Users.
Wenn du die grafische Benutzeroberfläche benutzt, ist das aktuelle
Verzeichnis eben das, welches selbige gerade eingestellt hat.
Nur unter 9x. Unter XP eben genau das nicht. Da lande ich im Document
Root (sp?) des aktuellen Benutzers, statt im Verzeichnis, dessen Fenster
ich gerade offen hatte.
Post by Stefan Reuther
Post by Ulrich F. Heidenreich
Unter Win 9x angeklickt steht darin der volle Pfad.
Unter DOS aufgerufen tatsächlich der Aufruf.
Weil die GUI eben grundsätzlich Aufrufe mit vollem Pfad generiert.
Du kannst auch unter DOS grundsätzlich alles über seinen vollen Pfad
aufrufen, aber ich nehme an, du wirst wie alle DOS-Nutzer dazu zu
tippfaul sein :-)
Hier war es eher interssant, daß *manchaml* auch ein "Echo %0" den
vollen Pfad auswarf, selbst wenn ich nur den Namen der Batchdatei
eintippte. Ich kann's nur nicht mehr reproduzieren.

CU!
Ulrich
--
In 9 Monaten und 18 Tagen ist Weihnachten
http://invalid.de/spank-the-mugu.html
http://invalid.de/phunnyphish.jpg
Stellt euch vor, es ist Sonntag und keiner geht hin!
Stefan Reuther
2010-03-06 15:49:39 UTC
Permalink
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Post by Dirk Wolfgang Glomp
Na sicher doch, wenn die betreffende Batchdatei dort gestartet wird wo sie
sich befindet.
[..]
Post by Dirk Wolfgang Glomp
Diese Einschränkung wurde ebensowenig als Bedingung vorgegeben
IMHO implizit schon. Wenn man sie dort startet, wo sie sich befindet,
erübrigt sich ja die Suche nach ihrem Speicherort.
Eben. Es wurde genausowenig die Einschränkung vorgegeben, dass die
Batchdatei sich in einem anderen Ordner als C:\BAT befindet. Wenn wir
also voraussetzen, dass sich die Batchdatei dort befindet (wo denn
sonst, also echt mal!!!), können wir den Pfad ja auch hartcodieren.
Post by Dirk Wolfgang Glomp
Der Ort könnte sich aber verändert haben wenn man die Batch mal wo anders
hin kopiert hat und dann die dann ohne Anpassung dort ebenfalls arbeiten
soll.
*Bingo* Das ist genau der Grund, warum ein Programm seinen eigenen Pfad
wissen möchten will. Man zieht das Programm um, die Daten ziehen mit.
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Mein Lösungsansatz wäre - vorausgesetzt, ihr Name ist eindeutig und
dir c:\*.bat /s /b /v | find "%0"
Mit IRQ21/AH=19 kann man den aktuellen Laufwerksbuchtaben ermitteln.
...welcher allerdings keinerlei Verbindung zum Namen der Batchdatei
haben muss.

Ansonsten scheitert Ulrichs Lösung auch dann, wenn die Batchdatei über
ihren (partiellen) Pfad aufgerufen wurde. Also z.B.
c:\eins> ..\zwei\foo.bat
oder
d:\> c:foo.bat
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Leider hat auch das den Schönheitsfehler, daß "%0" manchmal nur den
Dateinamen und manchmal bereits den vollen Dateinamen inklusiv Pfad
liefert (Im letzten Fall findet find dann nichts). Weiß hier jemand
*genau*, wann und wann nicht? Ich komme da auf keinen grünen Zweig.
Es ist auch möglich über FCB alle Ordner nach einer bestimmten Dateinamen
zu durchsuchen.
"Ordner durchsuchen" ist genau das, was mit FCB nicht geht. "Ordner"
geht nur mit File Handles.

Aber alle Ordner zu durchsuchen ist schlicht Overkill, weil der
Kommandozeileninterpreter da doch sowieso nicht sucht.
uses DOS;
var s : string;
begin
s := ParamStr(1);
if (Pos('\', s) = 0) then begin
if (Pos('.', s) = 0) then s := s + '.bat';
s := FSearch(s, GetEnv('PATH'));
writeln(s);
end else begin
writeln(FExpand(s));
end;
end.


Stefan
Dirk Wolfgang Glomp
2010-03-06 18:16:54 UTC
Permalink
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Post by Ulrich F. Heidenreich
Post by Dirk Wolfgang Glomp
Na sicher doch, wenn die betreffende Batchdatei dort gestartet wird wo sie
sich befindet.
[..]
Post by Dirk Wolfgang Glomp
Diese Einschränkung wurde ebensowenig als Bedingung vorgegeben
IMHO implizit schon. Wenn man sie dort startet, wo sie sich befindet,
erübrigt sich ja die Suche nach ihrem Speicherort.
Eben. Es wurde genausowenig die Einschränkung vorgegeben, dass die
Batchdatei sich in einem anderen Ordner als C:\BAT befindet. Wenn wir
also voraussetzen, dass sich die Batchdatei dort befindet
...ein spezieller Fall....
Post by Stefan Reuther
(wo denn
sonst, also echt mal!!!)
...hahaha, neee also wirklich nicht....
Post by Stefan Reuther
, können wir den Pfad ja auch hartcodieren.
Da hast du recht. Es ging aber doch um das Ermitteln.
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Mit IRQ21/AH=19 kann man den aktuellen Laufwerksbuchtaben ermitteln.
...welcher allerdings keinerlei Verbindung zum Namen der Batchdatei
haben muss.
Aber wenn doch von Ort der Batch auch selbige gestartet wird haben wir
genau diese Verbindung die wir brauchen und die Möglickeit Lfw+Pfad
zu ermitteln.
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Es ist auch möglich über FCB alle Ordner nach einer bestimmten Dateinamen
zu durchsuchen.
"Ordner durchsuchen" ist genau das, was mit FCB nicht geht. "Ordner"
geht nur mit File Handles.
Aber ja doch mit Fat16 geht es:

--------D-2111-------------------------------
INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
AH = 11h
DS:DX -> unopened FCB (see #01345), may contain '?' wildcards
Return: AL = status
00h successful
.....

--------D-2112-------------------------------
INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
AH = 12h
DS:DX -> unopened FCB (see #01345)
Return: AL = status
00h successful
Disk Transfer Area filled with unopened FCB
FFh no more matching filenames
Note: (see AH=11h)
assumes that successful FindFirst executed on search FCB before call
SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch

....

Bitfields for file attributes:
Bit(s) Description (Table 01401)
0 read-only
1 hidden
2 system
3 volume label (ignored)
4 reserved, must be zero (directory)
5 archive bit
7 if set, file is shareable under Novell NetWare
Post by Stefan Reuther
Aber alle Ordner zu durchsuchen ist schlicht Overkill, weil der
Kommandozeileninterpreter da doch sowieso nicht sucht.
uses DOS;
var s : string;
begin
s := ParamStr(1);
if (Pos('\', s) = 0) then begin
if (Pos('.', s) = 0) then s := s + '.bat';
s := FSearch(s, GetEnv('PATH'));
writeln(s);
end else begin
writeln(FExpand(s));
end;
end.
Also ich habe nicht für alle meine Ordner einen Eintrag im PATH dafür
stehen. Bräuchte ich so etwas würde ich dafür lieber eine eigene
*.cfg-Datei anlegen und dort zentral von allen eigenen Anwendungen aus
darauf zugreifen.

Dirk
Stefan Reuther
2010-03-06 22:51:52 UTC
Permalink
Post by Dirk Wolfgang Glomp
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Mit IRQ21/AH=19 kann man den aktuellen Laufwerksbuchtaben ermitteln.
...welcher allerdings keinerlei Verbindung zum Namen der Batchdatei
haben muss.
Aber wenn doch von Ort der Batch auch selbige gestartet wird haben wir
genau diese Verbindung die wir brauchen und die Möglickeit Lfw+Pfad
zu ermitteln.
Hallo McFly, jemand zuhause? Wenn wir schon vor Ort sind, brauchen wir
den Pfad gar nicht zu ermitteln, weil dann ein einfaches "." auch
reicht. Der knifflige Fall ist der, dass wir eben nicht vor Ort sind,
und einen entsprechenden Namen brauchen.
Post by Dirk Wolfgang Glomp
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Es ist auch möglich über FCB alle Ordner nach einer bestimmten Dateinamen
zu durchsuchen.
"Ordner durchsuchen" ist genau das, was mit FCB nicht geht. "Ordner"
geht nur mit File Handles.
--------D-2111-------------------------------
INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
"alle Ordner" geht damit eben genau nicht. Damit geht nur "das aktuelle
Verzeichnis".
Post by Dirk Wolfgang Glomp
Post by Stefan Reuther
Aber alle Ordner zu durchsuchen ist schlicht Overkill, weil der
Kommandozeileninterpreter da doch sowieso nicht sucht.
uses DOS;
var s : string;
begin
s := ParamStr(1);
if (Pos('\', s) = 0) then begin
if (Pos('.', s) = 0) then s := s + '.bat';
s := FSearch(s, GetEnv('PATH'));
writeln(s);
end else begin
writeln(FExpand(s));
end;
end.
Also ich habe nicht für alle meine Ordner einen Eintrag im PATH dafür
stehen.
Ich auch nicht. Deswegen unterscheidet obiges Progrämmchen, ob der
angegebene Name (man übergebe am besten das '%0' der Batchdatei) bereits
einen Pfad enthält oder nicht. Wenn es bereits einen enthält, so ist das
der gesuchte Pfad. Enthält es keinen, wird es im %PATH% gesucht. Dort
muss es auftauchen, sonst hätte die Shell es nicht gefunden.


Stefan
Dirk Wolfgang Glomp
2010-03-07 00:02:07 UTC
Permalink
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Mit IRQ21/AH=19 kann man den aktuellen Laufwerksbuchtaben ermitteln.
...welcher allerdings keinerlei Verbindung zum Namen der Batchdatei
haben muss.
Aber wenn doch von Ort der Batch auch selbige gestartet wird haben wir
genau diese Verbindung die wir brauchen und die Möglickeit Lfw+Pfad
zu ermitteln.
Hallo McFly, jemand zuhause?
Ja aber hallo, bist du jetzt nun etwas das HB-Mänchen was nun abhebt und
sich möglichst knifflige Sitauationen zurecht legst weil es dir so besser
gefällt?
Post by Stefan Reuther
Wenn wir schon vor Ort sind, brauchen wir
den Pfad gar nicht zu ermitteln, weil dann ein einfaches "." auch
reicht. Der knifflige Fall ist der, dass wir eben nicht vor Ort sind,
und einen entsprechenden Namen brauchen.
Von so einem knifflige Fall war in der Frage nichts zu finden und ich Frage
mich daher warum du es dir hierbei kniffliger als nötig gestaltest?
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Es ist auch möglich über FCB alle Ordner nach einer bestimmten Dateinamen
zu durchsuchen.
"Ordner durchsuchen" ist genau das, was mit FCB nicht geht. "Ordner"
geht nur mit File Handles.
--------D-2111-------------------------------
INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
"alle Ordner" geht damit eben genau nicht.
Das ist doch Unsinn....
Post by Stefan Reuther
Damit geht nur "das aktuelle
Verzeichnis".
...da jederzeit in ein dort gefundenes Unterverzeich gewechselt werden kann
und dann dieser Verzeichniss nun das aktuelle Verzeichnisss geworden ist,
das nun auf gleiche Weise durchsucht werden kann. Manno das ich dir so
etwas Simples erzählen muss ist ja erschreckend.
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Post by Stefan Reuther
Aber alle Ordner zu durchsuchen ist schlicht Overkill, weil der
Kommandozeileninterpreter da doch sowieso nicht sucht.
uses DOS;
var s : string;
begin
s := ParamStr(1);
if (Pos('\', s) = 0) then begin
if (Pos('.', s) = 0) then s := s + '.bat';
s := FSearch(s, GetEnv('PATH'));
writeln(s);
end else begin
writeln(FExpand(s));
end;
end.
Also ich habe nicht für alle meine Ordner einen Eintrag im PATH dafür
stehen.
Ich auch nicht. Deswegen unterscheidet obiges Progrämmchen, ob der
angegebene Name (man übergebe am besten das '%0' der Batchdatei) bereits
einen Pfad enthält oder nicht. Wenn es bereits einen enthält, so ist das
der gesuchte Pfad. Enthält es keinen, wird es im %PATH% gesucht. Dort
muss es auftauchen, sonst hätte die Shell es nicht gefunden.
Hmh, das hast du Verständlich genug gestaltet.

Dirk
Stefan Reuther
2010-03-07 11:30:35 UTC
Permalink
Post by Dirk Wolfgang Glomp
Post by Stefan Reuther
Wenn wir schon vor Ort sind, brauchen wir
den Pfad gar nicht zu ermitteln, weil dann ein einfaches "." auch
reicht. Der knifflige Fall ist der, dass wir eben nicht vor Ort sind,
und einen entsprechenden Namen brauchen.
Von so einem knifflige Fall war in der Frage nichts zu finden und ich Frage
mich daher warum du es dir hierbei kniffliger als nötig gestaltest?
Dieser "knifflige Fall" ist allerdings der einzige, in dem sich die
Frage überhaupt stellt. Oder antwortest du auf "Wie komme ich zum
Bahnhof" mit "Angenommen, du stehst auf dem Bahnhofsvorplatz, dann ist
der Bahnhof 20m weiter nördlich." Warum kniffliger als nötig gestalten
und annehmen, der Frager stünde in der Vorstadt?

Hrmpf.


Stefan
Dirk Wolfgang Glomp
2010-03-08 08:16:09 UTC
Permalink
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Post by Stefan Reuther
Wenn wir schon vor Ort sind, brauchen wir
den Pfad gar nicht zu ermitteln, weil dann ein einfaches "." auch
reicht. Der knifflige Fall ist der, dass wir eben nicht vor Ort sind,
und einen entsprechenden Namen brauchen.
Von so einem knifflige Fall war in der Frage nichts zu finden und ich Frage
mich daher warum du es dir hierbei kniffliger als nötig gestaltest?
Dieser "knifflige Fall" ist allerdings der einzige, in dem sich die
Frage überhaupt stellt. Oder antwortest du auf "Wie komme ich zum
Bahnhof" mit "Angenommen, du stehst auf dem Bahnhofsvorplatz, dann ist
der Bahnhof 20m weiter nördlich."
Ja genau so einfach könnte es sein, nur das der Reisende sich darum nicht
selber kümmern möchte und alles auf der intelligenten Fahrkarte bereits
automagisch richtig eingetragen haben möchte, egal auf welchem Bahnhof er
sich momentan befindet.
Post by Stefan Reuther
Warum kniffliger als nötig gestalten
und annehmen, der Frager stünde in der Vorstadt?
Für den Weg zum jeweiligen Bahnhof nimmt der Reisende doch ein Taxi
und der Fahrkartenautomat dort soll selbständig die gültige Bahnsteigkarte
für den jeweiligen Bahnhof dort eintragen. Ausser das es ein Lösung für DOS
sein soll, andere Bedingungen gehen aus der Frage nicht hervor.

Dirk

Dirk Wolfgang Glomp
2010-03-06 12:37:37 UTC
Permalink
Post by Dirk Wolfgang Glomp
RBIL->inter61b.zip->INTERRUP.F
--------D-2119-------------------------------
INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
AH = 19h
Return: AL = drive (00h = A:, 01h = B:, etc)
Note: Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this
call from a particular location every time it starts a command to
determine when to issue an automatic EOJ
SeeAlso: AH=0Eh,AH=47h,AH=BBh
RBIL->inter61b.zip->INTERRUP.G
Post by Dirk Wolfgang Glomp
--------D-2147-------------------------------
INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
AH = 47h
DL = drive number (00h = default, 01h = A:, etc)
DS:SI -> 64-byte buffer for ASCIZ pathname
Return: CF clear if successful
AX = 0100h (undocumented)
CF set on error
AX = error code (0Fh) (see #01680 at AH=59h/BX=0000h)
Notes: the returned path does not include a drive or the initial backslash
many Microsoft products for Windows rely on AX being 0100h on success
under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
SeeAlso: AH=19h,AH=3Bh,AH=71h,INT 15/AX=DE25h
Alternativ zu der Möglichkeit hierbei Debug zu verwenden hat uns Herbert
Kleebauer gezeigt wie man einen Opcode innerhalb einer Batchdatei plaziert.
Eine einfache Vorgehensweise wäre es den Laufwerksbuchtaben+Pfad an einen
dafür groß genug dimensionierten Speicherbereich zu schreiben, hinter den
Pfad ein "$" zu plazieren und alles zusammen dann über die Standardausgabe
auszugeben, die man dann bei Bedarf auch in eine Datei umleiten kann.

Dirk
Ulrich F. Heidenreich
2010-03-06 10:13:27 UTC
Permalink
Post by Stefan Reuther
Post by Andreas Hess
kann man mit einer Batch-Datei abfragen, wie der Pfad zu ihrem eigenen
Speicherort heißt?
In %0 findest du den Namen, mit dem die Datei aufgerufen wurde. Damit
kannst du jetzt anfangen zu spielen.
Interessanterweise gibt %0 den kompletten Pfad zurück, wenn man die
Batchdatei aus Windows doppelklickt, jedoch nur den Namen, wenn man
sie unter DOS aufruft.
Post by Stefan Reuther
Unter Windows XP bekommst du z.B. mit '%~dp0' den Pfad, an den du nur
noch einen Dateinamen anzuhängen brauchst.
Unter DOS geht das meines Wissens nach mit Bordmitteln nicht.
Wenn in %0 tatsächlich der komplette Pfad steht *und* der Name der
Batchdatei - z.B. mypath.bat - bekannt ist, täte es dort eine Portion
EDLIN mit 1,1Rmypath.bat^Z^ZWE. Leider steht er aber nicht immer in %0;
siehe oben.

CU!
Ulrich
--
In 9 Monaten und 19 Tagen ist Weihnachten
http://invalid.de/spank-the-mugu.html
Loading Image...
Stellt euch vor, es ist Samstag und keiner geht hin!
Loading...