jan999
Goto Top

Problem mit der Prüfung, ob Dateien vorhanden sind

Moin!

ich möchte via Batch abprüfen, ob im Autostart des Anwenders eine LNK-Datei vorhanden ist (dann ist alles ok) und eine Batch (die soll nicht da sein). Dafür habe ich u.g. Batch erstellt. Aber irgendwie kommen nie die erwarteten Antworten! Kann es sein, dass Batch Probleme mit den Dateinamen hat unter Win 7??

Kann mir einer weiterhelfen?

REM Test um die Installation zu prüfen
echo off

set root=C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
set test_lnk=%root%\MapEdit_Updater.bat.lnk
set test_bat=%root%\MapEdit_Updater.bat


set status=0

 if exist test_lnk (
    goto test_lnk_ok
    ) else (
    goto test_lnk_err
    )

:test_lnk_err
echo ***** LNK-Datei fehlt *****
goto weiter0
:test_lnk_ok
set status=1

:weiter0
 if exist test_bat (
    goto test_bat_err
    ) else (
    goto test_bat_ok
    )

:test_bat_err
echo ***** BAT-Datei vorhanden *****
goto weiter1
:test_bat_ok
set status=status+1


:weiter1

if status==goto ok
goto meldung


:ok
echo *************************************
echo *                                   *
echo *     Bei Ihnen ist alles OK !      *
echo *     Danke fuer die Mithilfe!      *
echo *                                   *
echo *************************************

:meldung
echo *************************************
echo *                                   *
echo *     Es gibt ein Unstimmigkeit!    *
echo *                                   *
echo *     Bitte informieren Sie den     *
echo *     MapEdit-Administrator!        *
echo *                                   *
echo *     Danke fuer die Mithilfe!      *
echo *                                   *
echo *************************************

:ende
pause

Gruß Jan

Content-ID: 344260

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

Ausgedruckt am: 17.11.2024 um 17:11 Uhr

Snowman25
Lösung Snowman25 24.07.2017 um 09:35:01 Uhr
Goto Top
Hallo!

if exist test_bat
Du musst test_bat schon als Variable nutzen!

{{ if exist "%test_bat%" }}  
Ebenso für andere Vorkomnisse des gleichen Musters.

Gruß,
@Snowman25
Snowman25
Lösung Snowman25 24.07.2017 aktualisiert um 09:37:21 Uhr
Goto Top
Und in Zeile 34: set status=status+1 musst du SET /A verwenden.
Auch Zeile 39: if status==goto ok wird so nicht funktionieren. Dein Ausdruck ist nicht fertig.
jan999
jan999 24.07.2017 um 10:37:25 Uhr
Goto Top
Moin !

das mit Zeile 34 habe ich klären können in

set /a status=status+1

Gleiches gilt für die erste Rückmeldung.

Das mit Zeile 39 verstehe ich aber noch gar nicht.

Darüber hinaus habe ich einige Ausgabezeilen mehr weiter oben eingebaut und werde den Eindruck nicht los, das es Probleme mit dem Suffix lnk gibt - in der Regel wird der nicht angezeigt und nur durch das angepasste Icons gekennzeichnet als Link.

?????

Gruß Jan
Snowman25
Snowman25 24.07.2017 aktualisiert um 11:00:51 Uhr
Goto Top
Zitat von @jan999:

Moin !
Hi,

Gleiches gilt für die erste Rückmeldung.
Hoffentlich auch für die 2. (Also in Zeile 11 und in Zeile 24.)

Das mit Zeile 39 verstehe ich aber noch gar nicht.
IF status==<command> ist keine gültige Syntax. Du musst status schon mit irgendetwas vergleichen.
Am besten solltest du Status initialisieren (also ganz oben SET status=0) und im Fehlerfall dann inkrementieren mit SET /A status=%status%+1.
Dann prüfst du in Zeile 39 so:
 IF %status% LEQ 0 goto ok

Darüber hinaus habe ich einige Ausgabezeilen mehr weiter oben eingebaut und werde den Eindruck nicht los, das es Probleme mit dem Suffix lnk gibt - in der Regel wird der nicht angezeigt und nur durch das angepasste Icons gekennzeichnet als Link.
Nein, das kann ich nicht bestätigen. LNK-Dateien werden nur vom Explorer speziell behandelt. Auf der Command-Line werden diese aber ganz normal angezeigt.
Siehe hier:
screenshot_3

Gruß Jan
Gruß,
@Snowman25
jan999
jan999 24.07.2017 um 11:24:46 Uhr
Goto Top
Moin !
gleich stecke ich den Kopf in den Sand! face-sad

Den aktuellen Code stelle ich ganz unten ran.

Egal ob die Dateien da sind oder nicht wird immer ausgegeben das die Dateien alle da sind.

Hier einige Bilder

dateien_fehlen

dateien_vorhanden

Hatte schon überlegt mit der Zeile

dir %root%

den aktuellen Verzeichnisinhalt mit anzeigen zu lassen - aber da kam immer nur die Meldung

Das System kann den angegebenen Pfad nicht finden.

Habe ich vielleicht irgendetwas mit den Leerzeichen in root falsch gemacht?

Gruß Jan

REM Test um die Installation zu pruefen
echo off

set root=C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
set test_lnk=%root%\MapEdit_Updater.bat.lnk
set test_bat=%root%\MapEdit_Updater.bat
set status=0

set status=0

 if exist %test_lnk% (
    goto test_lnk_ok
    ) else (
    goto test_lnk_err
    )

:test_lnk_err
echo ***** LNK-Datei fehlt *****
goto weiter0
:test_lnk_ok
echo ***** LNK-Datei vorhanden *****
set status=1

:weiter0
 if exist %test_bat% (
    goto test_bat_err
    ) else (
    goto test_bat_ok
    )

:test_bat_err

echo ***** BAT-Datei vorhanden *****
goto weiter1
:test_bat_ok
echo ***** BAT-Datei NICHT vorhanden *****
set /a status=status+1


:weiter1

if %status% EQU 2 goto ok
goto meldung


:ok
echo *************************************
echo *                                   *
echo *     Bei Ihnen ist alles OK !      *
echo *     Danke fuer die Mithilfe!      *
echo *                                   *
echo *************************************

:meldung
echo *************************************
echo *                                   *
echo *     Es gibt ein Unstimmigkeit!    *
echo *                                   *
echo *     Bitte informieren Sie den     *
echo *     MapEdit-Administrator!        *
echo *                                   *
echo *     Danke fuer die Mithilfe!      *
echo *                                   *
echo *************************************

:ende
pause
133883
Lösung 133883 24.07.2017 aktualisiert um 11:49:05 Uhr
Goto Top
Kinderkacke wenn man sich seinen Code nochmal "genau" ansehen und Anführungszeichen setzen würde.
Wenn man dann zusätzlich am richtigen Sprungpunkt die falsche Meldung ausgibt ist alles verloren :-P. face-big-smileface-big-smile
@echo off
set "root=C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"  
set "test_lnk=%root%\MapEdit_Updater.bat.lnk"  
set "test_bat=%root%\MapEdit_Updater.bat"  
set status=0

 if exist "%test_lnk%" goto test_lnk_ok  

:test_lnk_err
echo ***** LNK-Datei fehlt *****
goto weiter0
:test_lnk_ok
echo ***** LNK-Datei vorhanden *****
set status=1

:weiter0
 if exist "%test_bat%" goto test_bat_ok  

:test_bat_err
echo ***** BAT-Datei NICHT vorhanden *****
set /a status+=1
:weiter1

:test_bat_ok
echo ***** BAT-Datei vorhanden *****
goto weiter1

if %status% EQU 2 goto ok
goto meldung


:ok
echo *************************************
echo *                                   *
echo *     Bei Ihnen ist alles OK !      *
echo *     Danke fuer die Mithilfe!      *
echo *                                   *
echo *************************************
goto ende

:meldung
echo *************************************
echo *                                   *
echo *     Es gibt ein Unstimmigkeit!    *
echo *                                   *
echo *     Bitte informieren Sie den     *
echo *     MapEdit-Administrator!        *
echo *                                   *
echo *     Danke fuer die Mithilfe!      *
echo *                                   *
echo *************************************

:ende
pause
Snowman25
Snowman25 24.07.2017 um 11:44:59 Uhr
Goto Top
Hi,

dir %root% tut nicht, weil da ein Leerzeichen drin ist. Du musst dir "%root%" ausführen.
Das heißt, dass du auch in den IF-Abfragen Anführeinszeichen verwenden musst, weil da Leerzeichen vorhanden sind.

Hier ist der von mir korrigierte Code (ungetestet).
Ich habe ihn auch etwas gekürzt und unnötige Sprungmarken entfernt:
REM Test um die Installation zu pruefen
echo off

set root=C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
set test_lnk=%root%\MapEdit_Updater.bat.lnk
set test_bat=%root%\MapEdit_Updater.bat
set status=0

if NOT exist "%test_lnk%" goto test_lnk_err  
echo ***** LNK-Datei vorhanden *****
set /A status=%status%+1
goto weiter0

:test_lnk_err
echo ***** LNK-Datei fehlt *****

:weiter0
if exist "%test_bat%" goto test_bat_err  
echo ***** BAT-Datei NICHT vorhanden *****
set /A status=%status%+1
goto weiter1

:test_bat_err
echo ***** BAT-Datei vorhanden *****

:weiter1
if %status% LEQ 1 goto meldung

echo *************************************
echo *                                   *
echo *     Bei Ihnen ist alles OK !      *
echo *     Danke fuer die Mithilfe!      *
echo *                                   *
echo *************************************
goto ende

:meldung
echo *************************************
echo *                                   *
echo *     Es gibt ein Unstimmigkeit!    *
echo *                                   *
echo *     Bitte informieren Sie den     *
echo *     MapEdit-Administrator!        *
echo *                                   *
echo *     Danke fuer die Mithilfe!      *
echo *                                   *
echo *************************************

:ende
pause
jan999
jan999 24.07.2017 um 12:00:17 Uhr
Goto Top
Moin!

erst einmal ganz herzlichen Dank - es macht jetzt alles das so, wie ich es mir vorstelle bis auf...

... ja bis auf die Tatsache, das das Script auf einem Server liegen soll und die Anwender es einmal ausführen sollen. Dafür bekommen die den Link zugeschickt. So die Theorie.

Nun habe ich die BAT direkt ausgeführt und bekomme diese Meldung:

"\\local.xxxxx.de\ebl-daten\Abteilung\EBL_SRL\ALLG\MapEdit"
CMD.EXE wurde mit dem oben angegebenen Pfad als aktuellem Verzeichnis gestartet.

UNC-Pfade werden nicht unterstützt.
Stattdessen wird das Windows-Verzeichnis als aktuelles Verzeichnis gesetzt.


Es passt zwar nicht 100$% zur Posting Überschrift - aber wenn wir schon einmal dabei sind.

Kann mir das einer erklären oder eine Lösung sagen.

An derer Stelle habe ich schon Links in die Autostartverzeichnisse gelegt und die führen auch erfolgreich Batches aus.

???

Gruß Jan
Snowman25
Snowman25 24.07.2017 um 12:15:12 Uhr
Goto Top
Klar.
Schreib das ganz oben hin:

PUSHD \\%~P0


Die Erklärung steht schon da: die cmd.exe unterstützt keine UNC-Pfade (also \\<servername>\<Freigabe>).
Wenn du PUSHD auf einen UNC-Pfad ausführst, wird dieser temporär mit Laufwerksbuchstaben gemountet und kann dann normal genutzt werden. Sobald du POPD ausführst oder die cmd.exe beendet wird, geht auch der Laufwerksbuchstabe wieder weg.