gabrixl
Goto Top

Wo ist der Fehler in diesem Batch Skript?

Hallo com, ich finde den Fehler im folgenden (Teil)-Skript nicht und bin am verzweifeln. CMD meldet: "(" kann sntaktisch an dieser Stelle nicht verarbeitet werden.

set /p ex_username="Personal username: "
if %ex_username% == root (
cls
set /p rootpw="> "
if %rootpw% == "jdk_L539v4dot1" (
timout /t 2 > NUL
cls
set /p userlist="> "
if %userlist% == "!user~'list,/a" (
cd users
For /F %%i in ('dir /B') do set userlist=%%~ni
echo %userlist%
)
)
)

Content-ID: 329597

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

Ausgedruckt am: 23.11.2024 um 21:11 Uhr

MrCount
MrCount 16.02.2017 um 09:08:12 Uhr
Goto Top
Servus,

versuche es mal mit "%variable%" == "abcdef"

...
if "%ex_username%" == "root" (  
...
if "%rootpw%" == "jdk_L539v4dot1" (  
... etc.
gabrixl
gabrixl 16.02.2017 um 09:21:15 Uhr
Goto Top
Immer noch der selbe Fehler, aber danke.
MrCount
MrCount 16.02.2017 um 09:52:26 Uhr
Goto Top
Na dann setze dir mal Pausen, damit man den Punkt des Abbruchs leichter findet.

Was soll in Zeile 15 passieren?

@echo off
Setlocal EnableDelayedExpansion

set /p ex_username="Personal username: "  
if "%ex_username%" == "root" (  
cls
set /p rootpw="> "  
echo !rootpw!
if "!rootpw!" == "abc" (  
echo pw okay
timout /t 2 > NUL
cls
set /p userlist="> "  
echo !userlist!
if "!userlist!" == "!user~'list,/a" (  
cd users
For /F %%i in ('dir /B') do set userlist=%%~ni  
echo !userlist!
)
)
)
pause
gabrixl
gabrixl 16.02.2017 um 10:08:11 Uhr
Goto Top
Nunja, bei Zeile 15 erscheint ein leeres Fenster und solange man nicht "!user~'list,/a" eintippt kann man als root nichts machen. Es soll eine Art Passworteingabe ohne Aufforderung sein.. Hab mal mit pausen durch gecheckt, ist aber bei Zeile 4 bereits abgebrochen.
em-pie
em-pie 16.02.2017 aktualisiert um 10:16:44 Uhr
Goto Top
Moin,

Habe das gerade einmal nachgestellt.
Das Problem scheint zu sein, dass MS-DOS nicht mit If-Schleifen in IF-Schleifen klarkommt.

Der springt ja erst gar nicht in die erste Schleife rein.

Das ist mir beim editieren mit Notepad++ und dem Highlithing aufgefallen.
Die erste geöffnete Klammer wurde mit der ersten geschlossenen Klammer "bedient"..

mach es einfach wie folgt:
set /p ex_username="Personal username: "  

IF "%ex_username%" == "root" (  
	cls
	set /p rootpw="x "  
) ELSE (
	goto ENDE
)

if "%rootpw%" == "jdk_L539v4dot1" (  
	timout /t 2 > NUL
	cls
	set /p userlist="> "  
) ELSE (
	goto ENDE
)

if "%userlist%" == "!user~'list,/a" (  
	cd users
	For /F %%i in ('dir /B') do set userlist=%%~ni  
	echo %userlist%
) ELSE (
	goto ENDE
)


:ENDE
Pause

Gruß
em-pie
MrCount
MrCount 16.02.2017 um 10:11:51 Uhr
Goto Top
Nimm mal meinen Code aus dem letzten Posting...
gabrixl
gabrixl 16.02.2017 um 10:15:59 Uhr
Goto Top
Danke auch dir für deine Hilfe
gabrixl
gabrixl 16.02.2017 um 10:58:07 Uhr
Goto Top
Wusste nicht das, dass mit IF im IF nicht Funktioniert
em-pie
em-pie 16.02.2017 um 11:04:45 Uhr
Goto Top
Geht doch, siehe Mr.Counts letzten Code (habe des des eigenen Wissens wegen mal getestet).

Das scheint nur nicht zu funktionieren, wenn man die Variablen mit % "ansprechen" möchte.
Er verwendet hier die ! (was mir neu gewesen ist) und dann klappt auch eine verschachtelte IF-Abfrage...
gabrixl
gabrixl 16.02.2017 um 11:10:22 Uhr
Goto Top
achso alles klar, danke für die Aufklärung
MrCount
MrCount 16.02.2017 aktualisiert um 13:55:11 Uhr
Goto Top