Batch Syntax Error bei simpler IF EXIST Abfrage

JahniS01

Cadet 1st Year
Registriert
Dez. 2017
Beiträge
11
Hallo zusammen.

Es ist mir wirklich peinlich, aber ich komme einfach nicht darauf....

Ich mache in meiner batch ganz simple "if exist" Abfragen.
Frage ich damit den gesamten Datei/Ordnernamen ab funktioniert alles wunderbar.
Benutze ich aber Platzhalter (*.txt) bekomme ich bei der If Abfrage einen Syntaxfehler retour den ich mir nicht erklären kann.

Erstelle ich im selben Verzeichnis eine neue batch, die nichts anderes enthält als eine if Abfrage mit Platzhalter funktioniert es,
nur in meinem Code nicht. Ich komm nicht dahinter.

Es geht um den fett geschriebenen Teil hier:
:MOVELOCALIZEDITEMS
set "CurrentItem=!Item%Counter%!"
if "%CurrentItem%"=="next" goto MOVEUNLOCALIZEDITEMS
echo Aktuelles Item wird gesucht: %CurrentItem%
if exist "%CleanupPath%\%CurrentItem%" goto MLLI2

Antwort auf die if Abfrage mit * ist:
if exist "C:\Users\Stephan\Desktop\cleanup bat\Kasse\*.req" goto MLLI2
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
FINDSTR: C:\Users\Stephan\Desktop\cleanup bat\Kasse\*.req nicht gefunden kann nicht ge÷ffnet werden.

es ist ganz sicher nur eine dumme Kleinigkeit, aber ich werd langsam verrückt weil ich es nicht finde :grr:

Danke für Input



Code:
@echo off
title Cleanup
setlocal EnableDelayedExpansion

REM FarbFunktionen
        for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set "DEL=%%a")
        goto :COLOROFF
:COLOR
        echo off
        <nul set /p ".=%DEL%" > "%~2"
        findstr /v /a:%1 /R "^$" "%~2" nul
        del "%~2" > nul 2>&1
        goto :eof
:COLOROFF
        cls


:PATHS
    REM Pfad aus dem die Dateien entfernt werden sollen (Batch muss in diesem Verzeichnis liegen)
        set "CleanupPath=%cd%"
    REM Ordner in den die alten Dateien abgelegt werden, bevor sie später gelöscht werden
        set "FilingPath=%CleanupPath%\Ablage alter Daten"

:CHECKPASSED
    REM Ordnerstruktur für temporäre Ablage erstellen
        if not exist "%FilingPath%" md "%FilingPath%"
        if not exist "%FilingPath%\ZIP" md "%FilingPath%\ZIP"
        if not exist "%FilingPath%\BMP" md "%FilingPath%\BMP"
        if not exist "%FilingPath%\KREDITSTORNOFEHLER" md "%FilingPath%\KREDITSTORNOFEHLER"
        if not exist "%FilingPath%\LOGS" md "%FilingPath%\LOGS"

:VARIABLES
        set Counter=1

:LOCALIZEDITEMS
    REM Definierte Ordern verschieben (nur aus dem Kassen-Root-Verzeichnis)
        set "Item1=RPX"
        set "Item2=TablexIF"
        set "Item3=MF5.1"
        set "Item4=32Bit"
        set "Item5=64Bit"
        set "Item6=Btrv615"
        set "Item7=elpay"
        set "Item8=HP"
        set "Item9=HPBelege"
        set "Item10=Kaufmann"
        set "Item11=KB"
        set "Item12=KDisp"
        set "Item13=LIM"
        set "Item14=LogFileConfig"
        set "Item15=Resources"
        set "Item16=XBonus"
        set "Item17=BitmapsOld"
        set "Item18=Grunddaten"
        set "Item19=Neuer Ordner"
        set "Item20=Install"
        set "Item21=Drucker"
        set "Item22=Textdokument.txt"
        set "Item23=*.req"
        set "Item24=ZLDISPf.lbr"
        set "Item25=X3000-Ekarte*.txt"
        set "Item26=*.ttf"
        set "Item27=*.chk"
        set "Item28=Tischplan.msi"
        set "Item29=Kreditstorno*.#00"
        set "Item30=bitmaps\*.alt"
        set "Item31=bitmaps\*.exe"
        set "Item32=bitmaps\*.dll"
        set "Item33=bitmaps\*.err"
        set "Item34=bitmaps\*.db"
        set "Item35=bitmaps\*.rc"
        set "Item36=bitmaps\*.res"
        set "Item37=bitmaps\*.bat"
        set "Item38=bitmapsfax\*.bmp"
        set "Item39=asl.bat"
        set "Item40=copyDllsV15.01.bat"
        set "Item41=copyt.bat"
        set "Item42=daten0.bat"
        set "Item43=delmf.bat"
        set "Item44=deltxt.bat"
        set "Item45=protaus.bat"
        set "Item46=protein.bat"
        set "Item47=regti.bat"
        set "Item48=regtiauto.bat"
        set "Item49=reorg.bat"
        set "Item50=restore_tischplan.bat"
        set "Item51=retourd.bat"
        set "Item52=retourp.bat"
        set "Item53=save_tischplan.bat"
        set "Item54=setaslm.bat"
        set "Item55=sichernd.bat"
        set "Item56=sichernp.bat"
        set "Item57=starttablet.bat"
        set "Item58=teile.bat"
        set "Item59=teileb.bat"
        set "Item60=teilec.bat"
        set "Item61=tischplanmsiauto.bat"
        set "Item62=tpmsi.bat"
        set "Item63=update.bat"
        set "Item64=update_Tischplan.bat"
        set "Item65=next"

:CLEANUP
        cls
        echo.
        call :COLOR 9 "------------------------------------------------------------------"
        echo.
        call :COLOR 9 "-  Cleanup gestartet                    Programm nicht beenden!   -"
        echo.
        call :COLOR 9 "------------------------------------------------------------------"
        echo.
        echo.
        echo.

:MOVELOCALIZEDITEMS
        set "CurrentItem=!Item%Counter%!"
        if "%CurrentItem%"=="next" goto MOVEUNLOCALIZEDITEMS
    echo Aktuelles Item wird gesucht: %CurrentItem%
        if exist "%CleanupPath%\%CurrentItem%" goto MLLI2
        call :COLOR E "%CleanupPath%\%CurrentItem% nicht gefunden"
        echo.
        set /a Counter=%Counter%+1
        goto MOVELOCALIZEDITEMS
:MLLI2
    echo Aktuelles Item wird kopiert: %CurrentItem%
        if exist "%FilingPath%\%CurrentItem%" ren "%FilingPath%\%CurrentItem%" "%CurrentItem%_%random%"
        MOVE /y "%CleanupPath%\%CurrentItem%" "%FilingPath%" >nul
        if %Errorlevel%==0 call :COLOR A "%CleanupPath%\%CurrentItem% wurde verschoben"&& echo.&&goto MLLI3
        call :COLOR C "%CleanupPath%\%CurrentItem% Fehler beim verschieben!"
        echo.
:MLLI3
        set /a Counter=%Counter%+1
        goto :MOVELOCALIZEDITEMS
       
:MOVEUNLOCALIZEDITEMS
REM folgt später

:SUCCESS
echo.
echo.
echo.
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo.
echo Cleanup abgeschlossen.
echo.
echo Die alten Dateien wurden in den Ordner %filingPath% verschoben
echo.
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
pause
exit
 
Was passiert, wenn du "%CleanupPath%\%CurrentItem%" mal via echo ausgibst?

Enthält %CleanupPath% selbst evtl Anführungszeichen?
 
Zuletzt bearbeitet:
JahniS01 schrieb:
if exist "C:\Users\Stephan\Desktop\cleanup bat\Kasse\*.req" goto MLLI2
das hier ist die selbe if Abfrage als echo ausgegeben

Der Code ist schon lauffähig und kann bei euch jederzeit in einem beliebigen Ordner als batch getestet werden,
es werden natürlich keine Dateien gefunden aber man sieht dann die Ausgabe der syntax errors.
 
Zuletzt bearbeitet:
Ja sicher gibts nen Fehler. Ein Asterisk (*) ist kein gültiger Dateiname, oder Teil davon. Da braucht es eine aufgelöste Liste, und dann ist die Datei meistens auch da.


PS, nimm ps. Ist einfacher, da solche Expansionen da vollautomatisch passieren.
 
  • Gefällt mir
Reaktionen: tollertyp
Ja, würde sowas auch eher in der PS machen
Und ja, der Asterisk ist bei mir irgendwie untergegangen.
 
Danke für eure Antworten.

Wenn batch kein * bei einer IF Abfrage kann,
warum funktioniert es dann wenn ich einfach nur folgenden code in einer sonst leeren batch stehen habe:

Leider beherrsche ich kein PS.
bin ziemlicher noob der sich alles nur zusammengoogled und mit cmd habe ich hald zumindest hin und wieder zu tun

Code:
@echo off

if exist *.txt echo gefunden&& goto end
echo nicht gefunden
:end
 
beim findstr wird als 2ter Parameter "<Dateiname> nicht gefunden" übergeben...
Aktuelles Item wird gesucht: update_Tischplan.bat
findstr /v /a:E /R "^$" "D:\Test\update_Tischplan.bat nicht gefunden" nul
D:\Test\update_Tischplan.bat nicht gefunden
bzw. 2ter Parameter der COLOR Funktion
 
  • Gefällt mir
Reaktionen: tollertyp und JahniS01
Danke fürs Feedback.
Wie darf ich das verstehen?

Dein Beispiel bezieht sich auf eine IF Abfrage ohne *, die also funktioniert hat.

Die COLOR Funktion ist das einzig "besondere" in meinem code, dass es daran liegt würde sinn machen.

Eine Idee wie ich das korrigieren kann?
 
Beispiel Zeile 120:
Code:
call :COLOR E "%CleanupPath%\%CurrentItem% nicht gefunden"
Was ist denn die Absicht dieses Aufrufs?

Soll da ein Dateiname übergeben werden? Wenn ja, dann sollte da ein zusätzlicher Parameter dazu, dass es vielleicht in die Richtung geht:
Code:
call :COLOR E "%CleanupPath%\%CurrentItem%" "nicht gefunden"

Aber für sowas würde sich die PowerShell so viel besser eignen.
 
  • Gefällt mir
Reaktionen: JahniS01
tollertyp schrieb:
Beispiel Zeile 120:
Code:
call :COLOR E "%CleanupPath%\%CurrentItem% nicht gefunden"
Was ist denn die Absicht dieses Aufrufs?
Damit werden die einzelnen Zeilen bei der echo Ausgabe farblich gestaltet.
je nachdem ob die Datei nicht gefunden wird, verschoben wurde, oder ein Fehler auftrat
Ergänzung ()

Vielen Dank für eure Mühe @Korben2206 und @tollertyp 👍

ich werde es später versuchen zu fixen wenn ich wieder am PC bin und ansonsten die COLOR Funktion entfernen.

Danke vielmals ❤️
 
Zuletzt bearbeitet:
Zurück
Oben