Forum: PC-Programmierung Batch fehlersuche


von gmt (Gast)


Lesenswert?

Mein Code hat einen Syntaxtfehler bei "if %Bauteil%" Line 24.
Kann mir jmd sagen warum?

@Echo off
set "Prog=cmd.exe"

echo Bitte zu pruefendes Bauteil waehlen
echo 1. T-Stueck Komplett Zeichnung: 279667489
echo 2. Oeffner-Anschluss Zeichnung: 279658760
set /p Bauteil=
echo Bauteil: %Bauteil% >> messung.txt

:Ja
set "NewPID="
for /f "delims=" %%l in ('for /f "skip=3 tokens=2" %%p in ^('tasklist 
/fi "imagename eq %Prog%"'^) do @^<NUL set /p "=%%p "') do (set 
"PIDs=%%l")
echo Messung >> messung.txt
echo Bitte Benutzernamen eingeben
set /p Benutzer=
echo Benutzer %Benutzer% >> messung.txt
echo Bitte Teilenummer eingeben
set /p Teil=
echo Teil %Teil% >> messung.txt
echo Bitte Messdauer in Sekunden eingeben
set /p Messdauer=
echo Messdauer %Messdauer% >> messung.txt
echo Bitte Art der Messung waehlen
if "%Bauteil%"=="1"(
  echo 1. T2-T1
  echo 2. T1-T3
)
if "%Bauteil%"=="2"(
  echo 1. T2-A
  echo 2. T2-C
  echo 3. T2-Leckage
)
set /p Messung=

if "%Bauteil%"=="2" (
  if "%Messung%"=="1" (
    echo Messungsart T2-A >> messung.txt
    echo Sollwert 100 >> messung.txt
)
  if "%Messung%"=="2" (
    echo Messungsart T2-C >> messung.txt
    echo Sollwert 100 >> messung.txt
)
  if "%Messung%"=="3" (
    echo Messungsart T2-L >> messung.txt
    echo Sollwert 0,1 >> messung.txt
)
)
if "%Bauteil%"=="1" (
  if "%Messung%"=="1" (
    echo Messungsart T2-T1 >> messung.txt
    echo Sollwert 20 >> messung.txt
)
  if "%Bauteil%"=="1" if "%Messung%"=="2" (
    echo Messungsart T1-T3 >> messung.txt
    echo Sollwert 100 >> messung.txt
)
)
echo Zum Starten der Messung beliebige Taste drücken...
pause
@echo Messung wird gestartet
echo messung_start >> messung.txt
start Messung.cmd
for /f "skip=3 tokens=2" %%p in ('tasklist /fi "imagename eq %Prog%"') 
do (echo %PIDs% | find "%%p" > NUL || if not defined NewPID set 
"NewPID=%%p")
if defined NewPID echo Neue Instanz: %NewPID%
timeout /T %Messdauer%
taskkill /pid %NewPID%
echo messung_ende>> messung.txt

ECHO Moechten Sie noch eine Messung durchfuehren ? (j / n)
SET /p wahl=
if '%wahl%' == 'n' goto Nein
if '%wahl%' == 'j' goto Ja
Goto Ende

:Nein
echo Programm_Ende >> messung.txt
@echo Messung abgeschlossen
goto Ende

:Ende
pause

von Kaj (Gast)


Lesenswert?


von gmt (Gast)


Lesenswert?

vielen dank kaj dein link hat mir leider nicht geholfen.

wenn du mir einfach gesagt hättest das ein leerzeichen zwischen dem 
logischen und dem do teil stehen muss hätte mir das deutlich mehr 
geholfen

von Eric B. (beric)


Lesenswert?

gmt schrieb:
> vielen dank kaj dein link hat mir leider nicht geholfen.
>
> wenn du mir einfach gesagt hättest das ein leerzeichen zwischen dem
> logischen und dem do teil stehen muss hätte mir das deutlich mehr
> geholfen

Wenn du einfach die Zeile 24 in irgendeine Art und Weise gekennzeichnet 
hättest, so dass ich nicht hätte suchen und raten müssen welche Zeile 
eigentlich gemeint war, hätte ich es dir verraten können.

Die Windows batch-Sprache ist extrem empfindlich was Leerzeichen angeht. 
Pass auch auf mit Leerzeichen bei Variabelenzuweisungen und am Ende der 
Zeilen:

Das hier ist alles unterschiedlich
VAR=Etwas|
VAR= Etwas |
VAR="Etwas"|

Und Konstrukte wie
> for /f "delims=" %%l in ('for /f "skip=3 tokens=2" %%p in ^('tasklist
> /fi "imagename eq %Prog%"'^) do @^<NUL set /p "=%%p "') do (set
> "PIDs=%%l")
würd eich an deiner Stelle auseinander reißen und wenigstens Ansatzweise 
versuchen besser lesbar und damit besser wartbar zu machen.

Alternativ wäre nach eine andere Skriptsprache wie zB. Python 
umzuschauen.


PS. Was passiert wenn der Benutzer bei der 1. Frage "3" oder 
"Weissnicht" eingibt?

: Bearbeitet durch User
von Markus M. (adrock)


Lesenswert?

Es ist etwas OT, aber willst Du Dir wirklich die Windows Shell für 
Batchprogrammierung antun?

Ich nehme für soetwas gerne https://www.cygwin.com/.

Oder aber wenn es proprietär sein darf die Windows PowerShell.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.