faule DOS-Variablen

[HPI]Tobi

Cadet 3rd Year
Registriert
Apr. 2004
Beiträge
34
Hallihallo!

Ich bastle gerade unter DOS an einer Batch-Datei rum und google will mir nicht hierbei helfen:

Ich habe eine IF-Abfrage, in der eine Variable gesetzt wird. Dummerweise erkennt er die aber erst außerhalb des Blocks und beim nächsten Starten der Batchdatei.
Code:
if exist z:\Datei.dat (
  set status=vorhanden

  rem hier erkennt er's nicht:
  echo Die Datei ist %status%
)

rem hier erkennt er's schon:
echo Die Datei ist %status%

Weiß jemand eine Möglichkeit, wie ich das schon in dem IF-Block auslesen kann?

Danke, TOBI
 
proggy dir doch was mit pascal oda basic zusammen, is mindestens genauso einfach ;)
 
if exist z:\Datei.dat (
set status=vorhanden

rem hier erkennt er's nicht:
echo Die Datei ist %status%
)

if exist z:\Datei.dat (
echo Die Datei ist %status%
)

rem hier erkennt er's schon:
echo Die Datei ist %status%


Was wäre damit?
 
Hallo
mein Vorschlag wäre:

@echo off
set status=nicht vorhanden
if exist laufwerk:\dateiname.endung set status=vorhanden
@echo %status%


Gruß kaiuwe
 
So hast du aber möglicherweise Probleme mit der weiteren Struktur. Wer weiß, was er da noch vor hat :)
 
Hey, danke für die schnellen Antworten!
@AndrewPoison: Also Basic und Pascal kann ich ja auch fast nicht. Außerdem kann mans da nicht mal schnell ändern und muß alles erst kompilieren, darum hab ich an Batch gedacht. Und ich bin überzeugt, daß das damit auch geht.

@frow : Das Ganze zweimal hinzuschreiben ist natürlich eine Möglichkeit, aber das ist dann so unleserlich wie in Prolog. Aber vielleicht geht's so...

@kaiuwe: frow hat Recht. Ich kann das natürlich auch so ohne Klammern hinschreiben, aber in die Klammer sollte ja noch eine Menge anderes Zeug. Sonst wäre ich ja wieder bei frows Vorschlag mit zweimalschreiben.

Mir ist aber noch eingefallen, daß man das ja auch mit Sprungmarken nachbilden kann. Dann muß man zwar für jedes IF eine Extra-Sprungmarke setzen (vielleicht auch zwei oder drei und das ELSE und so), aber dafür geht's dann ohne Dopplung.

Ich glaube, das werd ich mal probieren, ansonsten eben mit Dopplung.
Ich habe aber mal sowas gelesen, daß das irgendwie mit einem Ausrufezeichen gehen soll, aber vielleicht war das was anderes.

Schönen Tag noch, TOBI
 
Ich habs also so gemacht:

Code:
rem if1
if Bedingung  (goto :if1_then) else (goto :if1_else)

:if1_then
  echo im Ifbereich...
  befehle
goto :end_if1

:if1_else
  echo im Elsebereich...
  befehle
goto :end_if1

:end_if1

Die Zahl hinter if steht für die Nummer des If-Blocks. Wenn man mehrere benutzt, dann würde ja immer in diesen oben beschriebenen Block gesprungen werden. Mit dieser Nummerierung kann das aber nicht passieren.

Die Klammern sind meiner Erfahrung nach wichtig. Ohne Klammern springt er immer in den Ifbereich.

Viel Spaß!
 
Also ich würds ja wieder anders machen:
Code:
@echo off
IF EXIST z:\Datei.dat GOTO %ERRORLEVEL%

:0
SET STATUS=vorhanden
ECHO Die Datei ist %STATUS%
...Befehle...
GOTO Irgendwohin

:1
SET STATUS=nicht vorhanden
ECHO Die Datei ist %STATUS%
...Befehle...

Meiner Meinung nach am einfachsten...
 
Zurück
Oben