Top-Themen

Aktuelle Themen (A bis Z)

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, 4973 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 ..
Ähnliche Inhalte
C und C++
IF Abfrage funktioniert nicht mehr
gelöst Frage von pablovicC und C++2 Kommentare

Hallo Ich habe eine Frage zu einem, zu Übungszwecken, geschriebenen Programm und zwar handelt es sich um einen Rechenprogramm, ...

Windows 7
If Abfrage in Batchdatei
gelöst Frage von sammy65Windows 76 Kommentare

Hallo miteinander, ich möchte eine cfg.Datei in ein Verzeichnis kopieren. Da ich sowohl Windows 7 32 bit und 64 ...

Batch & Shell
Powershell IF Abfrage Vergleichsoperatoren
gelöst Frage von PeterzBatch & Shell4 Kommentare

Hallo, ich möchte in einer IF Abfrage Vergleichsoperatoren verknüpfen und bekomme es nicht hin. Es sollte so aussehen: IF ...

Entwicklung
Verschachtelte IF Abfrage Powershell
gelöst Frage von HanutaEntwicklung19 Kommentare

Hallo Zusammen, habe ein Programm, das es in verschiedenen Versionen gibt 4.5.0 4.5.3 4.6.2 4.6.3 Das Programm soll überall ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 32 MinutenViren und Trojaner

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 4 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell8 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...