Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Doppelte If-Abfrage funktioniert nicht

Frage Entwicklung Batch & Shell

Mitglied: chappy

chappy (Level 1) - Jetzt verbinden

20.09.2010, aktualisiert 18.10.2012, 4887 Aufrufe, 6 Kommentare

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.

01.
 
02.
if exist "%%q\*.lok" ( 
03.
echo LOK vorhanden 
04.
goto ende 
05.
)  
06.
else if exist  "%%q\*.csv" 
07.
(  
08.
goto mail 
09.
echo CSV vorhanden 
10.
11.
:mail 
12.
cscript //nologo "%Msg%" "%%q\%%i" 
13.
:ende 
14.
 
kann mir jemand sagen, wo der Fehler liegt? habe auch ganz einfach mal versucht zu schreiben:

01.
if not exist "%%q\*.lok" 
02.
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
Mitglied: mathe172
20.09.2010 um 17:47 Uhr
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):
01.
for /R  %%A in (%%q\*.lok) do ( 
02.
if "%%q"=="%%~dpA" echo LOK vorhanden 
03.
04.
for /R  %%A in (%%q\*.csv) do ( 
05.
if "%%q"=="%%~dpA" echo CSV vorhanden 
06.
)
Mathe172
Bitte warten ..
Mitglied: Biber
20.09.2010 um 21:36 Uhr
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.
01.
... 
02.
REM ich unterstelle, dass in %%q irgendwas Sinnvolles steht aus einer FOR-Anweisung weiter oben 
03.
 
04.
:: Jetzt & Falsch ### if not exist "%%q\*.lok" 
05.
:: Jetzt & Falsch ### if exist "%%q\*.csv" do cscript //nologo "%Msg%" "%%q\%%i" 
06.
 
07.
:: Das ist EINE Befehlszeile 
08.
if not exist "%%q\*.lok" if exist "%%q\*.csv" do cscript //nologo "%Msg%" "%%q\%%i" 
09.
 
10.
:: Auch das ist EINE Befehlszeile 
11.
if not exist "%%q\*.lok" ( 
12.
     if exist "%%q\*.csv" do cscript //nologo "%Msg%" "%%q\%%i" 
13.
14.
 
@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
Bitte warten ..
Mitglied: chappy
21.09.2010 um 08:12 Uhr
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
Bitte warten ..
Mitglied: Biber
21.09.2010 um 15:19 Uhr
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
Bitte warten ..
Mitglied: mathe172
21.09.2010 um 18:17 Uhr
@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...
Thx

Mathe172
Bitte warten ..
Mitglied: chappy
22.09.2010, aktualisiert 18.10.2012
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.
http://www.administrator.de/forum/process%c3%bcberwachung-150244.html

nochmals Danke
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
C und C++
gelöst IF Abfrage funktioniert nicht mehr (2)

Frage von pablovic zum Thema C und C ...

Sicherheit
VeraCrypt: Doppelte Passwort Abfrage? (4)

Frage von pelzfrucht zum Thema Sicherheit ...

Datenbanken
gelöst IF Abfrage im SELECT Oracle SQL (2)

Frage von Roadrunner777 zum Thema Datenbanken ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...