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-Key: 344260

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

Printed on: April 26, 2024 at 00:04 o'clock

Member: Snowman25
Solution Snowman25 Jul 24, 2017 at 07:35:01 (UTC)
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
Member: Snowman25
Solution Snowman25 Jul 24, 2017 updated at 07:37:21 (UTC)
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.
Member: jan999
jan999 Jul 24, 2017 at 08:37:25 (UTC)
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
Member: Snowman25
Snowman25 Jul 24, 2017 updated at 09:00:51 (UTC)
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
Member: jan999
jan999 Jul 24, 2017 at 09:24:46 (UTC)
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
Mitglied: 133883
Solution 133883 Jul 24, 2017 updated at 09:49:05 (UTC)
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
Member: Snowman25
Snowman25 Jul 24, 2017 at 09:44:59 (UTC)
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
Member: jan999
jan999 Jul 24, 2017 at 10:00:17 (UTC)
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
Member: Snowman25
Snowman25 Jul 24, 2017 at 10:15:12 (UTC)
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.