chappy
Goto Top

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.

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

Content-ID: 151401

Url: https://administrator.de/contentid/151401

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

mathe172
mathe172 20.09.2010 um 17:47:23 Uhr
Goto Top
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):
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
Biber
Biber 20.09.2010 um 21:36:40 Uhr
Goto Top
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.
...
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
chappy
chappy 21.09.2010 um 08:12:39 Uhr
Goto Top
Hallo Biber,

erst einmal Danke für deine Hilfe. Diese von dir aufgeschriebene Variante hatte ich bereits auch mal ausprobiert. Ich nahm an, dass diese falsch äre, da ich trotz fehlender *.lok Datei keine Mail bekomme. Das ist leider auch der Fall. Warum bekomme ich dann keine email versendet? Es interessiert ihn nicht, ob die lok im Ordner liegt oder auch nicht. Es verursacht das gleiche Verhalten.

Folgendes steht im cmd:

U:\>set "Pfade=U:\Daten_L\Datenpool\CheckDEALV\Pfade.txt"
U:\>set "Msg=U:\Daten_L\Datenpool\CheckDEALV\CheckFolderMailService.vbs"
U:\>if not exist "%q\*.lok" if exist "%q\*.csv" do cscript //nologo "U:\Daten_L\Datenpool\CheckDEALV\CheckFolderMailService.vbs" "%q\%i"
U:\>

Danke und Gruss
danke auch an Mathe172
Biber
Biber 21.09.2010 um 15:19:03 Uhr
Goto Top
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
mathe172
mathe172 21.09.2010 um 18:17:09 Uhr
Goto Top
@Biber
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


Man lernt nie aus... face-smile
Thx

Mathe172
chappy
chappy 22.09.2010, aktualisiert am 18.10.2012 um 18:43:34 Uhr
Goto Top
Hallo Biber,

danke für deine Antwort genau das war das Problem. Ich hatte vergessen, %%q zu füllen. Desweiteren hatte ich nach jeder if-Anweisung ein do ( und das wurde auch moniert. Wenn ich das nu richtig verstanden habe, dann kommt nach der If-Anweisung direkt eine Klammer, kein do!?

Danke auf jeden Fall

chappy

PS. könntest du vielleicht auch mal beim folgenden Thread mitschauen? Ich komme da einfach nicht weiter.
Processüberwachung

nochmals Danke