Doppelte If-Abfrage funktioniert nicht
Hallo zusammen,
ich versuche schon krampfhaft folgendes in eine batch zu formulieren:
In einem Ordner soll geprüft werden, ob eine Datei *.lok vorhanden ist, wenn dem so ist, dann soll geprüft werden,
- prüfe in Ordner X, ob datei *.lok vorhanden,
---wenn ja, dann ende
- wenn nein, dann prüfe, ob *.csv im Ordner X vorhanden sind.
---wenn nein, dann ende
- wenn ja, dann sende mail
- ende
ich ahbe es so formuliert und es funktioniert nicht, egal, ob die Datei lok vorhanden ist oder nicht, bekomme ich eine Mail.
kann mir jemand sagen, wo der Fehler liegt? habe auch ganz einfach mal versucht zu schreiben:
ich bin davon ausgegangen, dass wenn Zeile 1 erfüllt ist, würde Zeile 2 ausgeführt werden ansonsten tut er nichts liege ich da falsch? kann mir jemand sagen, wo ich mehr über batch-Anweisungen wie diese Beispiele lesen kann? Ich bin meist am probieren und weiss nicht, wo ich den Fehler habe.
Danke und Gruss
chappy
ich versuche schon krampfhaft folgendes in eine batch zu formulieren:
In einem Ordner soll geprüft werden, ob eine Datei *.lok vorhanden ist, wenn dem so ist, dann soll geprüft werden,
- prüfe in Ordner X, ob datei *.lok vorhanden,
---wenn ja, dann ende
- wenn nein, dann prüfe, ob *.csv im Ordner X vorhanden sind.
---wenn nein, dann ende
- wenn ja, dann sende mail
- ende
ich ahbe es so formuliert und es funktioniert nicht, egal, ob die Datei lok vorhanden ist oder nicht, bekomme ich eine Mail.
if exist "%%q\*.lok" (
echo LOK vorhanden
goto ende
)
else if exist "%%q\*.csv"
(
goto mail
echo CSV vorhanden
)
:mail
cscript //nologo "%Msg%" "%%q\%%i"
:ende
kann mir jemand sagen, wo der Fehler liegt? habe auch ganz einfach mal versucht zu schreiben:
if not exist "%%q\*.lok"
if exist "%%q\*.csv" do cscript //nologo "%Msg%" "%%q\%%i"
ich bin davon ausgegangen, dass wenn Zeile 1 erfüllt ist, würde Zeile 2 ausgeführt werden ansonsten tut er nichts liege ich da falsch? kann mir jemand sagen, wo ich mehr über batch-Anweisungen wie diese Beispiele lesen kann? Ich bin meist am probieren und weiss nicht, wo ich den Fehler habe.
Danke und Gruss
chappy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 151401
Url: https://administrator.de/contentid/151401
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo chappy!
Meines Wissens nach ist es nicht möglich, platzhalter in if exist Abfragen zu benutzen. Wenn dies so ist (klärt mich auf wenns geht), dann versuch folgendes (ungetestet):
Mathe172
Meines Wissens nach ist es nicht möglich, platzhalter in if exist Abfragen zu benutzen. Wenn dies so ist (klärt mich auf wenns geht), dann versuch folgendes (ungetestet):
for /R %%A in (%%q\*.lok) do (
if "%%q"=="%%~dpA" echo LOK vorhanden
)
for /R %%A in (%%q\*.csv) do (
if "%%q"=="%%~dpA" echo CSV vorhanden
)
Mathe172
Moin chappy,
deine beiden unteren geposteten Zeilen sind für den Batch-Interpreter absolut voneinander unabhängig - ohne Wenn-Dann-Beziehung.
Um das von dir gewollte (und ja richtig gedachte) Verhalten zu erzeugen, musst du es in EINER Befehlszeile schreiben.
@mathe172
Doch, Platzhalter in "IF [NOT] Exist"-Abfragen sind zulässig.
Einfacher Test am CMD-Prompt
Grüße
Biber
deine beiden unteren geposteten Zeilen sind für den Batch-Interpreter absolut voneinander unabhängig - ohne Wenn-Dann-Beziehung.
Um das von dir gewollte (und ja richtig gedachte) Verhalten zu erzeugen, musst du es in EINER Befehlszeile schreiben.
...
REM ich unterstelle, dass in %%q irgendwas Sinnvolles steht aus einer FOR-Anweisung weiter oben
:: Jetzt & Falsch ### if not exist "%%q\*.lok"
:: Jetzt & Falsch ### if exist "%%q\*.csv" do cscript //nologo "%Msg%" "%%q\%%i"
:: Das ist EINE Befehlszeile
if not exist "%%q\*.lok" if exist "%%q\*.csv" do cscript //nologo "%Msg%" "%%q\%%i"
:: Auch das ist EINE Befehlszeile
if not exist "%%q\*.lok" (
if exist "%%q\*.csv" do cscript //nologo "%Msg%" "%%q\%%i"
)
@mathe172
Doch, Platzhalter in "IF [NOT] Exist"-Abfragen sind zulässig.
Einfacher Test am CMD-Prompt
>for %i in (txt bat cmd abc) do @if exist "D:\temp\*.%i" echo .%i-Dateien existieren
.txt-Dateien existieren
.bat-Dateien existieren
.cmd-Dateien existieren
Grüße
Biber
Moin chappy,
es kann ja nur funktionieren, wenn auch in dieser dynamischen Variablen "%q" (bzw. "%%q") irgendetwas Sinnvolles steht .
Vorzugweise eine Verzeichnisangabe.
Ob das so ist, kann ich doch aber nicht sehen von dieser Seite des Monitors aus.
Das müsstest du schon mal recherchieren und ggf mal mit einem "Echo If not exist "%q\*.lok" If exist "%q\*.csv..." sichtbar machen.
Oder ist das "%%q" nur ein Copy&Paste-Überbleibsel aus einem anderen Codeschnipsel und jetzt existiert gar keine FOR-Anweisung um deine geposteten Zeilen herum?
Grüße
Biber
es kann ja nur funktionieren, wenn auch in dieser dynamischen Variablen "%q" (bzw. "%%q") irgendetwas Sinnvolles steht .
Vorzugweise eine Verzeichnisangabe.
Ob das so ist, kann ich doch aber nicht sehen von dieser Seite des Monitors aus.
Das müsstest du schon mal recherchieren und ggf mal mit einem "Echo If not exist "%q\*.lok" If exist "%q\*.csv..." sichtbar machen.
Oder ist das "%%q" nur ein Copy&Paste-Überbleibsel aus einem anderen Codeschnipsel und jetzt existiert gar keine FOR-Anweisung um deine geposteten Zeilen herum?
Grüße
Biber
@Biber
Man lernt nie aus...
Thx
Mathe172
Zitat von @Biber:
@mathe172
Doch, Platzhalter in "IF [NOT] Exist"-Abfragen sind zulässig.
Einfacher Test am CMD-Prompt
>for %i in (txt bat cmd abc) do @if exist "D:\temp\*.%i" echo .%i-Dateien existieren
.txt-Dateien existieren
.bat-Dateien existieren
.cmd-Dateien existieren
@mathe172
Doch, Platzhalter in "IF [NOT] Exist"-Abfragen sind zulässig.
Einfacher Test am CMD-Prompt
>for %i in (txt bat cmd abc) do @if exist "D:\temp\*.%i" echo .%i-Dateien existieren
.txt-Dateien existieren
.bat-Dateien existieren
.cmd-Dateien existieren
Man lernt nie aus...
Thx
Mathe172