Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Batch minimized command line. Compact syntax

Mitglied: firebird3000

firebird3000 (Level 1) - Jetzt verbinden

26.02.2008, aktualisiert 27.02.2008, 13057 Aufrufe, 8 Kommentare

Bei http://de.wikibooks.org/wiki/Batch-Programmierung:_Programmierungs_Hilf ... bin ich auf diesen Code gestoßen. Er startet die batch minimiert. Kann mir jemand sagen, wie der Aufbau funktioniert?
@set !=||(set !=1&start "%~dpnx0" /min cmd /c %0 %*&set !=&goto :eof)

Ich verstehe die Syntax nicht. Das mit den Ausrufezeichen und den Gleichheitszeichen verstehe ich nicht.
Mitglied: miniversum
26.02.2008 um 14:36 Uhr
Das wirkt so kryptisch weil es so kompakt geschrieben ist.
Das Prinzip ist eigentlich sehr einfach. Ich zerlege jetzt den code in die einzelnen Bestandteile:
@set !=||(...)
- Das @ heist nur das die Befehlszeile nicht angezeigt werden soll
- Mit set != Wird eine bestehen de Variable "!" gelöscht
- Das "||" bedeutet das das was dahinter steht (also das in der Klammer) ausgeführt wird wenn das Befehl vor der Klammer zu einem Fehler führt. D.h. in diesem Fall, sollte eine Variable mit dem namen "!" nicht existieren kann diese auch nciht gelöscht werden und dadurch werden die Befehle in der Klammer ausgeführt.

set !=1&start "%~dpnx0" /min cmd /c %0 %*&set !=&goto :eof
Das sind eigentlich 4 Befehle di ein einer zeile stehen und nacheinander abgearbeitet werden.
set !=1
Die Variable "!" wird auf 1 gesetzt
start "%~dpnx0" /min cmd /c %0 %*
Dieser aufruf sorgt dafür das eine neue cmd minimiert gestartet wird und die Batchdatei selbst in diesem neuen Fenster ausgeführt wird. Da nun die Variable "!" schon gesetzt ist wird nicht nochmal einneues Fenster geöffnet weil die Klammer nicht ausgeführt wird.
set !=
Die Variable "!" wird wieder gelöscht
goto :eof
Es wird ans Ende Der Datei gesprungen. Das ist notwendig das die Batch dieim ersten cmd Fenster läuft nicht nochmal das gleiche danach ausführt.

Das ganze funktioniert halt nur solange es nicht aus irgent einem Grung auf den PC keine Umgebungsvariable mit dem namen "!" gibt. Was allerdings relativ unwahrscheinlich ist.

Das ganze also was nacheinander passiert:
  • Batch wird gestartet im cmd Fenster 1
  • Da die Variable "!" nicht gesetzt ist wird
  • sie auf 1 gesetzt
  • danach eine minimierte cmd inder die Batch selbst nochmal aufgerufen wird, die allerdings merkt das die Variable "!" schon gesetzt ist und daher mit dem Rest nach dieser Zeile weitergemacht wird
  • die Variable "!" wird gelöscht
  • und ans Ende der Datei gesprungen

Ichhoffe das war einigermasen veständlich erklärt?

miniversum
Bitte warten ..
Mitglied: firebird3000
26.02.2008 um 17:55 Uhr
Ja, das war schon sehr hilfreich.
Aber bei dieser Zeile verstehe ich den Sinn dieses Vorgangs nicht
start "%~dpnx0" /min cmd /c %0 %*
Ich schreibe mal, wie ich das verstehe:
Das "%~dpnx0" meint den kompletten Pfad und den Namen der aktuellen Batch Datei
und ist eine Erweiterung zu %0. Diese Batch wird gestartet und öffnet ein
Kommandozeilenfenster, das das aktuelle Programm per Namen (%0) aufruft mit allen
Parametern (%*), die schon beim ersten Starten der Batch Datei, in der diese Zeile steht
@set !=||(set !=1&start "%~dpnx0" /min cmd /c %0 %*&set !=&goto :eof) , mitgegeben wurden.

Was ich mich dabei frage: warum wird die Batch Datei nochmal minimiert gestartet, um eine cmd aufzurufen, die dann nochmal das Programm startet?
Bitte warten ..
Mitglied: miniversum
26.02.2008 um 18:18 Uhr
Es ist so das mit dem Start befehl Keine Batch dateien gestartet werden können. Daher cmd /c %0 %*. Das stellt also das zu startende Programm dar.
Um das minimiert hinzubekommen braucht man allerdings den Start-Befehl.

Der teil "%~dpnx0" ist nur ein Label. Also die bezeichnung die in dem minimierten Fenster in der Leiste oben steht. Man könnte es also auch durt "hallo du ich bin minimiert" ersetzen.
Bitte warten ..
Mitglied: firebird3000
26.02.2008 um 19:36 Uhr
Der teil "%~dpnx0" ist nur ein
Label. Also die bezeichnung die in dem
minimierten Fenster in der Leiste oben steht.
Man könnte es also auch durt "hallo
du ich bin minimiert" ersetzen.
Ja, stimmt. Wegen den Anführungszeichen. Daran habe ich nicht gedacht.

Warum heißt es "%~dpnx0" und nicht "%~dp0" ?
Wofür ist das setzen der Variable != gut?
Warum wird die Variable ! mehrmals geändert?
Bitte warten ..
Mitglied: miniversum
27.02.2008 um 09:17 Uhr
Bei "%~dp0" würde es dir nur das Laufwerk udn den Pfad anzeigen. Ist denke ich Geschmackssache was da angezeigt wird. Wenn das Fenster sowieso minimiert startet sieht man es normalerweise sowieso nicht.

Die Variable ! stellt einfach eine art merker dar. Die Batchdatei ruft sich ja selbst auf. Wäre dieser Merker nicht da würde sie immer wieder sich selbst starten bis ins unendliche. Daher wird in der Klammer die Batch selbst gestartet udn die Variable gesetzt, so das die zweite batch merkt das sie schon die minimiert gestartet ist und nicht nocheinmal sich selbst aufruft.

Vielleicht hilft es dir wenn du die befehle einzeln durchgehst und dir aufschreibst wie die variable in Welchem moment gesetzt ist um es nachvollziehen zu können.
Bitte warten ..
Mitglied: Biber
27.02.2008 um 10:53 Uhr
Moin firebird3000,

drei Fussnoten zu diesem Beitrag.

1) Es ist nach meinem Empfinden immer der zweitbeste Weg, bei Fragen zu Lösungen aus anderen Foren (oder groups) diese hier abzustellen. Der Verfasser dieses Oneliners hat sich namentlich geoutet - dann solltest Du ihn fragen.

2) Aber erst dann, nachdem Du selbst versucht hast es Dir selbst aufzudröseln. Wie miniversum auch geschrieben hat.

3) Der Verfasser des Oneliners hat die Zeile nach eigenem Bekunden und meinen Englischkenntnissen "heute morgen schnell zusammengeschrotet".
Deshalb noch der Hinweis, dass diese Zeile NICHT funktionieren kann, wenn in der Registry "DelayedExpansion" (entgegen den M$-Ab-Werk-Einstellungen) aktiviert ist.
[ HKEY_CURRENT_USER\Software\Microsoft\Command Processor
DelayedExpansion REG_DWORD 0x1
siehe Hilfe "CMD /?"]

Dann lässt sich nicht mit einer Variablen namens "!" arbeiten.
Besser also:
01.
@set #=||(set #=1&start "%~dpnx0" /min cmd /c %0 %*&set #=&goto :eof)
Grüße
Biber
[Edit] Anmerkung auch in den wikibooks ergänzt. [/Edit]
Bitte warten ..
Mitglied: firebird3000
27.02.2008 um 12:13 Uhr
Danke, miniversum.

1) Es ist nach meinem Empfinden immer der
zweitbeste Weg, bei Fragen zu Lösungen
aus anderen Foren (oder groups) diese hier
abzustellen. Der Verfasser dieses Oneliners
hat sich namentlich geoutet - dann solltest
Du ihn fragen.
Ich habe ihn über seine Homepage aufgesucht und ihm eine E-Mail geschickt. Aber leider habe ich
noch keine Antwort erhalten. Dies geschah aber vor diesem Posting hier.

2) Aber erst dann, nachdem Du selbst
versucht hast es Dir selbst
aufzudröseln. Wie miniversum auch
geschrieben hat.
Die Grundbefehle sind mir auch bekannt, aber das mit den doppelten Pipes und deren Funktionsweise habe ich nicht gewusst.

3) Der Verfasser des Oneliners hat die Zeile
nach eigenem Bekunden und meinen
Englischkenntnissen "heute morgen
schnell zusammengeschrotet".
Deshalb noch der Hinweis, dass diese Zeile
NICHT funktionieren kann,
wenn in der Registry
"DelayedExpansion" (entgegen den
M$-Ab-Werk-Einstellungen) aktiviert ist.
[
HKEY_CURRENT_USER\Software\Microsoft\Command
Processor

DelayedExpansion REG_DWORD
0x1

^^siehe Hilfe "CMD /?"] ^
Ich wusste, dass man ein Ausrufezeichen statt eines % verwenden, aber wozu das gut ist, weiß ich nicht.


Dann lässt sich nicht mit einer
Variablen namens "!" arbeiten.
Besser also:
01.
@set #=||(set #=1&start
02.
> "%~dpnx0" /min cmd /c %0 %*&set
03.
> #=&goto :eof)
04.
> 

Danke, Biber.
Bitte warten ..
Mitglied: Biber
27.02.2008 um 13:07 Uhr
Moin firebird3000,

Ich wusste, dass man ein Ausrufezeichen statt eines % verwenden,
aber wozu das gut ist, weiß ich nicht.

Kann ich vielleicht schnell zeigen (obwohl es bei dem Beispielschnipsel oben nicht verwendet wird).
01.
>for /l %i in (1,1,7) do @echo %random% !random!
02.
11736 29003
03.
11736 794
04.
11736 16807
05.
11736 20674
06.
11736 3866
07.
11736 27976
08.
11736 12944
Die Variable %random% wird einmal, beim Einlesen der auszuführenden Zeile aufgelöst.
Die Variable !random! wird verzögert, erst beim einzelnen Schleifendurchlauf aufgelöst und hat deshalb immer unterschiedliche Werte.

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch-Syntax
gelöst Frage von gabeBUBatch & Shell1 Kommentar

Hallo Zusammen Ich habe ein ganz kleines, Simples Batch-File geschrieben, dass mir ein Programm installieren soll, wenn es nicht ...

Batch & Shell
Wmic command per Batch ausführen
gelöst Frage von Chaser21aBatch & Shell2 Kommentare

Hallo Community, Ich möchte gerne per Batchdatei bei mehreren Rechnern über den cmd command: Die installierten Windows Updates von ...

Windows Server
WMI-Filter Syntax
gelöst Frage von DasWombat1993Windows Server10 Kommentare

Hallo Liebe Administratoren, Ich habe ein Problem mit einem WMI-Filter. Der Filter wird auf eine Gruppenrichlinie angewendet welche eine ...

Microsoft

DATEV Compact Update vs. "defektem" Patch

Frage von FA-jkaMicrosoft3 Kommentare

DATEV benötigt in der aktuellsten Version den Patch KB3033929. Wir erinnern uns - das ist der, "der das Windows ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 2 TagenHumor (lol)6 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 3 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 7 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 7 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
PCIe 1.0 Grafikkarte für 3840x2160
Frage von Windows10GegnerGrafikkarten & Monitore30 Kommentare

Hallo, mein Vater hat einen neuen Monitor gekauft, welcher eine native Auflösung von 3840*2160 hat. Diese muss jetzt auch ...

Windows Server
Dienstnamen und oder Deutsche und Englische Beschreibung in services.msc gleichzeitig anzeigen
gelöst Frage von vafk18Windows Server23 Kommentare

Guten Morgen, die Suche nach Diensten in services.msc gestaltet sich immer wieder schwierig, weil mir je nach Aufgabe die ...

Windows Server
Kleine Umfrage: Windows Server Desktop oder Core?
Frage von doomfreakWindows Server15 Kommentare

Hey :) Ich wollte mal eine kleine Umfrage hier starten. Ich bin schon etwas länger auf dieser Seite hier ...

JavaScript
Javascript: WebSql
gelöst Frage von internet2107JavaScript14 Kommentare

Guten Morgen zusammen, zunächst einmal einen schönen dritten Advent. Ich habe ein Problem mit Javascript und WebSQL. Bisher habe ...