PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeichen in Batch "nutzlos" machen



florian0
15.03.2008, 01:11
Hi,

sry erstmal zum Titel, aber mir ist nix besseres eingefallen.

Ich mache gerade JustForFun ein BatchScript, das meine Hostsdatei (für einen Silrkoad Privat Server) Patcht.

Wenn keine HostsDatei vorhanden ist, fragt es, ob es eine erstellen soll. Wenn man N eingibt, also Nein, fragt es, ob man das Patchen abbrechen will.

Hier liegt mein Problem:

@echo off
echo ## Suche nach Hosts-Datei ...
If NOT Exist %systemroot%\system32\drivers\etc\hosts goto create
:create
SET /P create=Die Hosts-Datei existiert nicht. Wollen Sie eine Neue erstellen? (j/n):

IF "%create%"=="" (
ECHO Nichts eingegeben
GoTo :create
)
IF /I "%create%"=="J" (
ECHO Erstelle ...
copy hosts %systemroot%\system32\drivers\etc\hosts && type hosts
) ELSE (
IF /I "%create%"=="N" (
SET /P exit=Wollen Sie das Patch-Programm beenden? (j/n):
If /I "%exit%"=="N" (
goto create
) ELSE (
exit
)
)
) ELSE (
ECHO Sie müssen J oder N eingeben
)
)
pause

Da das ROT markierte ja in den Klammern des IF steht, wird die Klammer zu bei (j/n): für das Vorherige IF verwendet, und der folgende Doppelpunkt als SyntaxError.
Ich würde gerne der ) seine Funktion entnehmen. Geht das?

Mir kam gerade die Idee einfach mit :Label und goto zu arbeiten. Wenn das mit dem "Nutzlosmachen" nicht gehen sollte, werde ich das dann warscheinnlich so machen


Gruß

florian0

PS: Hier gab es dochmal diesen BatchViren generator von BerlinerMauer oder so. Da hab ich mir immer dran orientiert (bis ich den falschen Knopf gedrückt habe, und die Batch geöffnet habe).
Hat jemand vielleicht noch einen Download Link?

big earl
15.03.2008, 01:45
ist doch kla, wenn du immer %create% als String nimmst

schreib ma was anderes hin

florian0
15.03.2008, 11:28
ist doch kla, wenn du immer %create% als String nimmst

schreib ma was anderes hin

Wie jetzt?
Sry aber das verwirrt mich.

Ohne die Exit abfrage funktioniert mein Script ja (bis jetzt) einwandfrei.

Ich möchte nur, dass diese ) klammer zu im Rotmarkierten NICHT für den IF befehl verwendet wird.


IF /I "%create%"=="N" (
SET /P exit=Wollen Sie das Patch-Programm beenden? (j/n):

big earl
04.07.2008, 19:51
also du könntest das in Häckchen setzen, doch dann siehst shice aus

Formulier deine Frage doch einfach anders

( sry das ich erst so spät antworte, hab den Post gar net gesehen )

berlinermauer
04.07.2008, 20:00
Entweder du machst einfach ein EXIT (was soll der User denn auch sonst machen...^^)

oder du machst das in ner "objekt Orientierten Sprache"

Nimos
04.07.2008, 20:10
Zeichen nutzlos machen geht mit "^" vor dem zeichen. dadurch wird es einfach zum zeichen das es ist, ohne besondere funktion, wie > : = etc...

ich habe auch letztens mal einen batchviren creator gemacht^^

kannst den ja mal zum lernen weiterbenutzen wenn du willst :p (is aber net so gut, war mein 2tes halbwegs-ernsthaftes batch programm...)

such mal auf www.nimos.6x.to

Chris_X¥
05.07.2008, 19:05
http://www.robvanderwoude.com/escapechars.html

All DOS versions interpret certain characters before executing a command.
Some well know examples are the percent sign ( % ), and the redirection symbols ( < | > ).

Windows 95/98 and NT, and OS/2 too, also interpret double quotes ( " ) and ampersands ( & ), as shown in the Conditional Execution page.

In batch files, the percent sign may be "escaped" by using a double percent sign ( %% ).
That way, a single percent sign will be used within the command line.

In Windows 95/98 and NT, and OS/2 too, redirection symbols may be escaped by placing them between double quotes ( ">" ).
However, the quotes themselves will be passed to the command too, unlike the double percent sign.

Windows NT and OS/2 also allow the use of carets ( ^ ) to escape special characters. Even linefeeds can be escaped this way, as is shown in the Useless Tips page.

If you intend to "nest" commands with escaped characters, you may need to escape the escape character itself too.
In general, that won't make it any easier to read or debug your batch files, however.

Ich hätte jetzt gedacht, dass (ja/nein) als ein Klammernpaar gilt. Vielleicht geht es ja auch, wenn du die ganze Frage
SET /P exit=Wollen Sie das Patch-Programm beenden? (j/n):
Also sowas dann
SET /P exit="Wollen Sie das Patch-Programm beenden? (j/n):"
Vielleicht auch mal einfache Anführungszeichen ' verwenden?

Und wenn alles nichts hilft: Nimm halt was anderes statt den runden klammern. Zum Beispiel eckige [ ].