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?
Gruß Jan
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 344260
Url: https://administrator.de/contentid/344260
Ausgedruckt am: 17.11.2024 um 17:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo!
Du musst test_bat schon als Variable nutzen!
Ebenso für andere Vorkomnisse des gleichen Musters.
Gruß,
@Snowman25
if exist test_bat
Du musst test_bat schon als Variable nutzen!
{{ if exist "%test_bat%" }}
Gruß,
@Snowman25
Hi,
Am besten solltest du Status initialisieren (also ganz oben
Dann prüfst du in Zeile 39 so:
Siehe hier:
@Snowman25
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:
Gruß Jan
Gruß,@Snowman25
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.
Wenn man dann zusätzlich am richtigen Sprungpunkt die falsche Meldung ausgibt ist alles verloren :-P.
@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
Hi,
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:
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
Klar.
Schreib das ganz oben hin:
PUSHD \\%~P0
Die Erklärung steht schon da: die
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
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.