kkboy94
Goto Top

Syntaxfehler bei Befehl ohne Parameter

Hallo Leute,


Das Problem tritt in Verbindung mit einer meiner anderen Fragen auf, bzw. mit dem jeweiligen Registry-Pfad

Mein Problem ist folgendes:

Ich habe in meiner Batch den Befehl
REG QUERY "HKCR\lnkfile\shell\ueber"
Wenn ich diesen Befehl norrmal am CMD-Prompt teste, erscheint kein Fehler.
Erst wenn ich den Befehl in die Batch packe, erscheint die Fehlermeldung "Syntaxfehler".
Aber wie kann ich einen Syntaxfehler bekommen, wenn ich gar keine Parameter benutze?


Ich hoffe ihr könnt mir helfen.

Danke schonmal im Voraus für alle Lösungsvorschläge/-anregungen

MfG Karsten

Content-ID: 148418

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

60730
60730 05.08.2010 um 13:55:31 Uhr
Goto Top
Moin,
Erst wenn ich den Befehl in die Batch packe, erscheint die Fehlermeldung "Syntaxfehler".
Aber wie kann ich einen Syntaxfehler bekommen, wenn ich gar keine Parameter benutze?

[OT]
  • xcopy ohne parameter liefert auch einen Syntaxfehler, obwohlweil keine Parameter genommen wurden.
[/OT]
steht da wirklich "ueber" oder über?

... denn das wäre ein Grund für einen Fehler.

Gruß
kkboy94
kkboy94 05.08.2010, aktualisiert am 18.10.2012 um 18:43:03 Uhr
Goto Top
Danke für den Vorschlag,

Um genau zu sein, ich meine mit eine "meiner anderen Fragen" konkret diese hier:
Kontextmenü-Eintrag für Verknüpfungen und passender Befehl
Ich habe aber trotzdem mal alle Einträge so geändert, dass ich anstatt des "ueber" wirklich überall "über" genommen habe (Natürlich mit den entsprechenden Variablen, wegen dem bekannten Problem den Umlauten in DOS, also %ue%=ä,%ae%=ä,usw.... Kennst du sicher auch)
Zusätzlich habe ich mal den Parameter "/S" dazu genommen, aber leider auch ohne Erfolg, bzw. das gleiche Ergebnis.


Gruß zurück
it-frosch
it-frosch 05.08.2010 um 16:03:39 Uhr
Goto Top
Hallo Karsten,

wäre es möglich das du in der Batch am Ende des Befehls dem PROMT vergessenhast?

Ich habe in einer Batch folgendes getestet:

1 REG query "HKCR\Software\Microsoft\Windows"
2
3 pause
4 REG query "HKCR\Software\Microsoft\Windows">c:\test.log
5
6pause


Funktioniert. Zuerst wird der Schlüssel angezeigt und anschließend in die Datei test.log geschreiben.

Grüße vom IT-Frosch
kkboy94
kkboy94 05.08.2010 um 17:10:14 Uhr
Goto Top
Hmm, ich weiß zwar nicht ganz, was du mit "PROMT" meinst, aber das was du in der Batch hast funktioniert bei mir auch, wenn ich es in eine seperate batch-Datei tue.
In Meiner Batch ist es aber auch so, dass jeder beliebige Registry-Pfad den gleichen Fehler (Syntaxfehler) ausgibt. Also gebe ich hier mal meine Batch frei, weil ich den Fehler einfach nicht finde:
chcp 1252>nul
set ue=ü
set ae=ä
set oe=ö
set Uue=Ü
set Aae=Ä
set Ooe=Ö
set ss=ß
chcp 850>nul

title Kontextmen%ue%eintrag f%ue%r Verkn%ue%pfungen

::Vorbereitungen
md "%ProgramFiles%\Linkshell" 2>nul  
set "log=%ProgramFiles%\Linkshell\install.log"  
if exist %log% del %log% 2>nul
> %log% echo Installationslog des Kontextmenüeintrages für Verknüpfungen
>> %log% echo ____________________________________________________________
>> %log% echo Variablen werden gesetzt
set "uninstall="  
set "vbsFullName=%ProgramFiles%\Linkshell\link.vbs"  
>> %log% echo ...
>> %log% echo Variablen wurden gesetzt

::Einleitung
echo Dieses Programm f%ue%gt den Eintrag
echo "%Uue%bergeordneten Ordner %oe%ffnen" in's Kontextmen%ue% hinzu.  
echo Nach der Installation hat man bei Verkn%ue%pfungen
echo eine neue Option, welche den %ue%bergeordneten Ordner %oe%ffnet, zu Verf%ue%gung
echo.
echo.

::Es wird als erstes überprft, ob der Kontextmenüeintrag schon vorhanden ist.

::Überprüfung der Registry
REG QUERY "HKCR\lnkfile\shell\%ue%ber"  
if "%errorlevel%" EQU "1" (  
echo Eintrag nicht vorhanden
set /p "install=Soll der Eintrag nun installiert werden? (Ja/Nein): "  
if not defined install goto errleerins
)
:checkins
if /i "%install:~,1%" EQU "J" goto :Install  

if /i "%install:~,1%" EQU "N" goto :Letend  
goto :errfalschunins
::Uninstall-Frage
set /p "uninstall=Soll der Kontextmenüeintrag wirklich deinstalliert werden? (Ja/Nein): "  
if not defined uninstall goto :errleerunins
:checkunins
if /i "%uninstall:~,1%" EQU "J" goto :Delete  
if /i "%uninstall:~,1%" EQU "N" goto :Holdend  
goto :errfalschunins

::Ausführung der Optionen
:Install

>> %log% echo.
>> %log% echo Installationsvorgang wird gestartet
>> %log% echo Script wird erstellt
echo.
echo Ben%oe%tigtes Script wird erstellt
(
echo Set oSh=WScript.CreateObject^("WScript.Shell"^)  
echo LNKfullname=oSh.CreateShortcut^(WScript.Arguments^(0^)^).TargetPath
echo LNKpath=WScript.CreateObject^("Scripting.FileSystemObject"^).GetParentFolderName^(LNKfullname^)  
echo oSh.Run "explorer.exe """ ^& LNKpath ^& """"  
)>"%vbsFullName%"  
>> %log% echo ...
echo ...
>> %log% echo Script wurde erstellt
echo Ben%oe%tigtes Script wurde erfolgreich erstellt
echo.
>> %log% echo Registryeinträge werden geschrieben
echo Ben%oe%tigte Registryeintr%ae%ge werden geschrieben
reg add "HKCR\lnkfile\shell\%ue%ber" /ve /d "%Uue%bergeordneten Ordner %oe%ffnen" /f 2>nul >nul  
if "%errorlevel%" EQU "1" goto :enderrorInstall  
>> %log% echo ...
>> %log% echo Registry-Eintrag "HKCR\lnkfile\shell\%ue%ber" wurde geschrieben  
reg add "HKCR\lnkfile\shell\%ue%ber\command" /t REG_SZ /ve /d "%SystemRoot%\system32\wscript.exe \"%vbsFullName%\" \"%%1\"" /f 2>nul >nul  
if "%errorlevel%" EQU "1" goto :enderrorInstall  
>> %log% echo Registry-Eintrag "HKCR\lnkfile\shell\%ue%ber\command" wurde geschrieben  
echo ...
echo Ben%oe%tigte Registryeintr%ae%ge wurden erfolgreich geschrieben
goto :installend

:Delete
reg delete "HKCR\lnkfile\shell\%ue%ber" /f 2>nul >nul  
if "%errorlevel%" EQU "1" set "errA=1"  
rmdir %ProgramFiles%\Linkshell /s /q 2>nul >nul
if "%errorlevel%" EQU "1" set "errB=1"  
if "%errB%" EQU "1" (  
if "%errA%" EQU "1" (  
goto :enderrordelete
))
echo.
echo Registry-Eintrag wurde erfolgreich gel%oe%scht
echo Dateien wurden erfolgreich gel%oe%scht
echo Verzeichnis wurde erfolgreich gel%oe%scht
goto :deleteend

::Endmeldungen
:Letend
echo Der Kontextmen%ue%eintrag wird nicht installiert
echo Sie k%oe%nnen den kontextmen%ue%eintrag sp%ae%ter installieren
echo Beliebige Taste zum Beenden dr%ue%cken
pause >nul
goto :eof
:Holdend
echo Die Option wird behalten
echo Sie k%oe%nnen den kontextmen%ue%eintrag sp%ae%ter deinstallieren
echo Beliebige Taste zum Beenden dr%ue%cken
pause >nul
goto :eof

:deleteend
echo.
echo Deinstallation erfolgreich beendet
echo Beliebige Taste zum Beenden dr%ue%cken
pause >nul
goto :eof

:installend
echo.
echo.
echo Installation erfolgreich beendet
>> %log% echo ...
>> %log% echo Installation wurde erfolgreich beendet
echo Das Installationsverzeichnis wird beim Beenden ge%oe%ffnet
echo Beliebige Taste zum Beenden dr%ue%cken
pause >nul
start "Linkshell" "%ProgramFiles%\Linkshell"  
ping -n 1 localhost >nul
goto :eof

::Mögliche Errormeldungen
:errleerins
echo.
echo !!Leere Eingabe!!
set /p "install=Bitte Eingabe wiederholen: "  
if not defined install goto :errleer
goto :checkins
:errfalschins
echo.
echo !!Falsche Eingabe!!
set /p "install=Bitte Eingabe wiederholen: "  
if not defined install goto :errfalsch
goto :checkins

:errleerunins
echo.
echo !!Leere Eingabe!!
set /p "uninstall=Bitte Eingabe wiederholen: "  
if not defined uninstall goto :errleer
goto :checkunins
:errfalschunins
echo.
echo !!Falsche Eingabe!!
set /p "uninstall=Bitte Eingabe wiederholen: "  
if not defined uninstall goto :errfalsch
goto :checkunins
:enderrorInstall
echo !!Fehler beim Schreiben in die Registry!!
echo Das Programm wird nun beendet
ping -n 3 localhost >nul
goto :eof

:EDIT: Der Betreffende Übeltäter befindet sich in Zeile 36 (reg query)
60730
60730 05.08.2010 um 18:01:56 Uhr
Goto Top
Moin,

"dachte ichs mir doch üüüüü..

Also ich hab keinen Dunst, was dzu da veranstaltest, aber ich schreibe ausschliesslich englische Scripte.

oder schreibst du gehezu beginn? - Nein Goto Start face-wink

"Über" - heisst demnach about und wech ist das Problem....

Ps: In Zeile 33 machst du das ja vor face-wink

Wobei
N:\>reg query "HKEY_CURRENT_USER\test"

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\test

HKEY_CURRENT_USER\test\über

N:\>reg query "HKEY_CURRENT_USER\test\über"

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\test\über


du einfach mal Edit.exe öffnen solltest und in edit deine Umlaute neu setzen solltest - wenn du die denn weiterbehalten willst.
reg query "HKEY_CURRENT_USER\test"  

pause
reg query "HKEY_CURRENT_USER\test\ber"  
pause

C:\script>reg query "HKEY_CURRENT_USER\test"

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\test

HKEY_CURRENT_USER\test\über

C:\script>pause
Drücken Sie eine beliebige Taste . . .

C:\script>reg query "HKEY_CURRENT_USER\test\über"

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\test\über

C:\script>pause
Drücken Sie eine beliebige Taste . . .

Gruß
kkboy94
kkboy94 05.08.2010 um 18:14:06 Uhr
Goto Top
Hmm. Ich fasse mich kurz, bin etwas in Eile:

1. Ich weiß nicht welche "Edit.exe" du meinst.
2. Ich habe mal alle "%ue%ber" und "über" ausgetauscht gegen "about", aber das Problem besteht trotzdem weiterhin. Auch in der registry habe ich den schon vorhandenen SChlüssel von "über" in "about" umgeändert, aber trotzdem keine Erfolg.


Achja, ich schreibe gern Denglisch :D


MfG

:EDIT: In Zeile 33 habe ich das Ü einfach nur vergessen
it-frosch
it-frosch 05.08.2010 um 20:00:30 Uhr
Goto Top
Hallo kkboy94,

ein PROMPT ist das Drücken der ENTER - Taste. Die kennst du sicherlich. face-smile

Die Edit.exe ist der Editor des Betriebssystems. Die Datei heißt bei dir vielleicht nur edit dann hast du die Dateiendungen ausgeblendet.

Wichtig - getestet unter Windows XP SP3
Ich habe jetzt mal in eine test.cmd den problematischen Teil deines Codes reinkopiert.
::Überprüfung der Registry 

REG QUERY "HKCR\Software\Microsoft\Windows"  

if "%errorlevel%" EQU "1" (   
echo Eintrag nicht vorhanden 
set /p "install=Soll der Eintrag nun installiert werden? (Ja/Nein): "   

Wenn ich die test.cmd aufrufe an der Konsole dann bekomme ich das folgende Ergebnis:

C:\Dokumente und Einstellungen\user>REG QUERY "HKCR\Software\Microsoft\Win


! REG.EXE VERSION 3.0

HKEY_CLASSES_ROOT\Software\Microsoft\Windows

HKEY_CLASSES_ROOT\Software\Microsoft\Windows\CurrentVersion
C:\Dokumente und Einstellungen\user>C:\Dokumente und Einstellungen\user>



Deinen Syntaxfehler bekomme ich nicht.

Grüße vom IT-Frosch
Biber
Biber 05.08.2010 um 21:21:03 Uhr
Goto Top
Moin kkboy94,


ich geb dir mal drei Tipps zum lustigen Fehlerrauspuhlen:

  • wenn du das erste Anführungszeichen in 'set "log=%ProgramFiles%\Linkshell\install.log"' und set "vbsFullName=%ProgramFiles%\Linkshell\link.vbs"' jeweils um 5 Zeihen nach rechts verschieben würdest, dann würde dein restliches Skript auch laufen ohne syntaxfehler, wenn "%ProgarmFiles%" ein leerzeichen enthält wie z.B. "C:\Program Files"
  • wenn du zwei Häufchen machst und den linken Haufen alle Sprungmarkennamen legst, die mit "goto :whatever" angesprungen werden und auf den rechten Haufen alle Sprungmarken, die ":whatever" heissen.... fällt dir was auf?
  • und letzter Tipp: Wenn du irgendwo einen nicht soforf erkennbaren Fehler in einem Schnipsel hast dann
a) Ersetze alle Ausgabe in %log% und in %vbsfile% doch erstmal in Bildschirmausgaben 'set "log=con"/Set "vbsfile=con"'
b) AUF GAR KEINEN FALL geh mit Behauptungen wie ":EDIT: Der Betreffende Übeltäter befindet sich in Zeile 36 (reg query)" heran. Fehlersuche muss ergebnisoffen sein.

Du hast hier viele viele gute Leute um die ganz falschen Häuser geschickt.

Na ja, so viele so gute nun auch nicht, aber trotzdem...

Grüße
Biber
kkboy94
kkboy94 06.08.2010 um 17:08:32 Uhr
Goto Top
Danke bastla für die hilfreichen Tipps
Der zweite Tipp: Da ist mir gar nicht aufgefallen, dass ich da so einiges vertauscht, bzw. vergessen hatte.
Hiermit entschuldige ich mich auch direkt mal für )b von Tipp Nr. 3, denn der Fehler lag gar nicht im Befehl "reg query" sondern in der IF-Überprüfung danach: Jetzt sieht meine Batch in dem Teil folgendermaßen aus:
REG QUERY "HKCR\lnkfile\shell\%ue%ber" 2>nul >nul  
if "%errorlevel%"=="1" (  
goto :askInstall
) else (
goto :askUninstall
)

Und ich entschuldige mich auch mal direkt bei Timo und dem Frosch, weil ich euch vergeblich nach einem nicht vorhandenem Fehler habe suchen lassen.
Das ist mir aber auch erst aufgefallen, als ich dann jeden Befehl einzeln getestet habe.
Danke für die Vorschläge, die sicher geholfen hätten, wenn ich den Fehler nicht direkt auf reg query geschoben hätte.


MfG Karsten
bastla
bastla 06.08.2010 um 18:05:04 Uhr
Goto Top
Hallo kkboy94!
Danke bastla für die hilfreichen Tipps
Das "Danke" reiche ich hiermit bestimmungsgemäß an Biber weiter ... face-wink

Grüße
bastla
Biber
Biber 06.08.2010 um 18:33:48 Uhr
Goto Top
Moin bastla,

Zitat von @bastla:
Das "Danke" reiche ich hiermit bestimmungsgemäß an Biber weiter ... ´face-wink
Ist angekommen, danke face-wink

Grüße an alle
Biber
it-frosch
it-frosch 07.08.2010 um 07:54:49 Uhr
Goto Top
Hallo Karsten,

gut das du es gefunden hast.

Ein schönes WE.

it-frosch
kkboy94
kkboy94 07.08.2010 um 14:17:54 Uhr
Goto Top
Oh schuldigung biber. Ihr helft mir beide imm er so viel, deswegen... Es fangen ja auch beide namen mit B an^^.
Biber
Biber 07.08.2010 um 14:28:32 Uhr
Goto Top
{OT]
Zitat von @kkboy94:
Oh schuldigung biber. Ihr helft mir beide imm er so viel, deswegen... Es fangen ja auch beide namen mit B an^^.
Ist verständlicn... zudem schreiben sich beiden Nicks ohne "tz" und ohne "y"....da kann das schon mal passieren.
Ich verwechsele auch manchmal FDH, FDJ und FDP...
Du kannst uns aber leicht auseinanderhalten... bastla ist der Rechtsüberholer.

Grüße
Biber
[/OT]
bastla
bastla 07.08.2010 um 15:25:18 Uhr
Goto Top
[OT too]
... und noch ein Unterschied: FDH verwechsle ich nicht, das ignoriere ich ... face-wink

Allen ein schönes Wochenende
bastla
[/OT too]
kkboy94
kkboy94 07.08.2010 um 15:29:47 Uhr
Goto Top
Hmm oke, und wer is dann eher der Einzeilen-Batchler?
Nach dem, was ich gelesen hab, ja eher Biber, und bastla is mehr in VBS versiert oder?
Und was meinst du mit "Rechtsüberholer"


Euch auch nochn schönes WE

[More OT]