Wie gut seit ihr mit der Windows Comandozeile (CMD) vertraut?

Das Ergebnis basiert auf 30 Abstimmungen

Kann nur bestimmte Befehle 27%
Kenne Mich mitelmäsig aus 17%
Kenne mich überhaupt nicht aus 13%
Habe ich verlernt 13%
Anders 13%
Kenne mich sehr gut aus (Woher? - Antwort währe interesant) 10%
Bin am Lernen 7%

13 Antworten

Kenne mich sehr gut aus (Woher? - Antwort währe interesant)

Meine "Spielwiese": https://www.gutefrage.net/home/thema/batch-trick/neue

Wenn man viele Jahrzehnte in der Console "zuhause" ist, sollte man schon einiges an Erfahrungen gesammelt und noch mehr Überraschungen erlebt haben.

CMD ist lediglich eine Weiterentwicklung des command.com aus der Dos-Ära.

Es sind einige interne Erweiterungen hinzugekommen um (mehr schlecht als recht) den Anforderungen von Windows gerecht zu werden:

  • lange Dateinamen, welche auch Leer- und Sonderzeichen enthalten können.
  • Starten von parallel laufenden Prozessen (unter Dos war ja nur ein laufender Prozess möglich)
  • Extensionen und verzögerte Variablenexpansion
  • fix des leidigen Errorlevelbugs. (hier kommt es darauf an, welche Endung eine Batchdatei hat: .cmd =neues Errorhandling , .bat Doskompatibles Errorhandling.
  • einige neue interne und externe Befehle

Alles im Einzelnen aufzuführen würde ein Buch füllen.

Da es zu jeder Zeit eine große Menge Administrativer Scripte gab, welche trickreich Bugs oder andere Unzulänglichkeiten umgingen, nutzen, missbrauchten konnte cmd nie in dem Maße gefixed werden wie es nötig gewesen wäre um alle Fehler zu beseitigen.

wäre dies geschehen, wäre folgendes unmöglich:

set "str=Hallo. Ich bin ein kleiner Blindtext..maeh.. Und zwar schon so lange ich denken kann."
  rem entferne Punkte. (normales Stringreplace)
echo %str:.=%
  rem entferne alles links vom ersten Punkt. 
echo %str:*.=%
 rem Tausche alle l gegen R
echo %str:l=R%
  rem ...soweit normales  Vehalten
  
  
  rem jetzt  wird  es misteriös:
  rem entferne alles rechts vom ersten Punkt
  rem Hintergrund: ersetze den Punkt durch .&Kommanndo...
  rem das wird intern für jede Vorkommen getan ...(nur das der Parser dies auch gleich ausführt)
  rem ...&rem:tut nichts , also werden alle  folgenden vorkommen verschluckt...
  rem was bleibt ist der erste Teil das Strings
echo %str:. =.&rem:%
  rem ...folglich  geht dies auch:
echo %str:. =.&echo:%
  rem und nur nach  letztem trenner  ausgeben
echo %str:. =.& set last=%
echo blubb %last%
  rem teile und nummeriere
(echo %str:. =.&echo:%)|find /n /v ""


   rem verteile auf  mehrere Variablen (ohne delayedExp.) 
for /f "tokens=1* delims=[]" %%a in ('^(echo %str:. =.^&echo:%^)^|find /n /v ""') do (set str.%%a=%%b)
set str.

...ok, dass man in einer Ersetzungsvariable einen String gegen einen Befehl austauschen kann, welcher auch sofort ausgeführt wird, weiß fast niemand...

...und so gibt es tausende Tricks, welche man benötigt um einigermaßen vernünftig mit cmd/Batch arbeiten zu können .

Wie andere ältere Herrschaften zum Zeitvertreib Kreuzworträtsel lösen, war es in den vergangen Jahren mein Hobby die Möglichkeiten von Cmd/Batch bis an die Grenzen des Möglichen auszureizen. Immer in dem Wissen, dass sich vieles in einer Anderen Sprache wesentlich bequemer lösen ließe. Einfach die Sportliche Herausforderung (Gewichtheber stemmen 250 kilo und mehr , dass könne man auch mit einem Gabelstabler erledigen😅) ... also haltet mich nicht für total durchgeknallt)

Im realen Leben schätze ich stattdessen moderne Programmier-/Scriptsprachen wie C# oder Powershell.

  • Um mal schnell eine Abfolge von Programmen zu starten ist Batch in jedem Fall effizienter, als Powershell,
  • geht es jedoch darum, automatisch komplexe Daten als Entscheidungskriterien für Dateioperationen, auszuwerten, ist Powershell die bessere Wahl. und extem Mächtig:

Taskleiste verstecken (und wieder Sichtbar machen):

toggleTaskBar.ps1

$myType=Add-Type -MemberDefinition @'
    [DllImport("user32.dll")] public static extern int FindWindow(string className, string windowText);
    [DllImport("user32.dll")] public static extern int ShowWindow(int hwnd, int command);
'@  -Namespace WNDtools -Name WND -passthru
$hwnd = $myType::FindWindow("Shell_TrayWnd","");
if (($myType::ShowWindow($hwnd,0)) -eq 0) {$Null=$myType::ShowWindow($hwnd,1)}

Da es aber lästig ist Powershellscripte mit Rechtsklick zu starten, kann man ein ganzes PowershellScript auch in eine Batch verpacken, dann geht normaler Doppelklick. damit findet sich doch wieder ein nutzen für cmd/batch:

toggleTaskbar.cmd

@echo off
powershell "$myType=Add-Type -m '[DllImport("""user32.dll""")] public static extern int FindWindow(string className, string windowText);[DllImport("""user32.dll""")] public static extern int ShowWindow(int hwnd, int command);' -Name WND -pass;$hwnd=$myType::FindWindow('Shell_TrayWnd','');if (($myType::ShowWindow($hwnd,0)) -eq 0) {$Null=$myType::ShowWindow($hwnd,1)}"
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Anders

Ich kann damit umgehen aber auch hier müsste ich die Befehle nachsehen. Das letzte Mal dass ich CMD oder Powershell verwendet habe, war um einen Datenträger zu partitionieren oder formatieren, weil es mit den normalen Mitteln nicht funktionierte.

Für mehr brauche ich es eigentlich nicht.

ForumLibhaber 
Fragesteller
 02.07.2023, 13:45

Computerferwaltung > Datenträgerferwaltung.

Da findetman die Funktionen. (WINDOWS 10/11 bei anderen müsste es genausosein, aber ich habe das nie getestet)

0
Kenne Mich mitelmäsig aus

Meine Linux Kenntnisse sind da besser, aber gerade, wenn es um komplettes Scripting geht, mit der CMD, habe ich extra Tools, damit ich dieses Scripting in C# machen kann, ohne Visual Studio zu benutzen. Für mich, als .NET Entwickler, macht es das um einiges einfacher.

  • dotnet-repl
  • dotnet-script

Das sind so die Tools, die ich benutze. Die funktionieren sehr gut.

CMD an sich, wie auch PowerShell bekomme ich hin (mit Google als Hilfe). Eigenständig nur sehr eingeschränkt. Auf Linux bin ich da viel mehr erfahren. Das liegt einfach daran, dass ich einen Linux Server habe, welcher nur über die Commandline läuft und bei Windows habe ich viel UI, weshalb ich es meistens nicht brauche.

ForumLibhaber 
Fragesteller
 21.06.2023, 14:39

Was bedeutet eigentlich immer dieses UI?

0
FaTech  21.06.2023, 14:44
@ForumLibhaber

User Interface. Vielleicht dann doch eher GUI sagen, denn das G steht für Graphical. Ist eventuell verständlicher. In dem Fall meint es den grafischen Bereich, der hilft, eine Kommunikation mit dem Gerät herzustellen. Beispiel: Labels (Text), Klickbare Elemente, wie Buttons und Links, usw.. Vereinfacht ausgedrückt

1
Anders

Gut, aber nicht sehr gut. Batch wird in der Regel nicht verwendet, da greife ich lieber zu PowerShell.

Einfach, weil ich Entwickler bin und immer wieder die CLI nutze von verschiedenen Betriebssystemen.

ForumLibhaber 
Fragesteller
 21.06.2023, 14:29

Was macht man mit der Powershell ?

Habe bisher keinen Nutzen gesehen!

0
Dultus, UserMod Light   21.06.2023, 14:34
@ForumLibhaber

PowerShell ist eben ein Skript, das direkt auf die Windows Ressourcen zugreifen kann, ohne große Umwege oder Libraries und dabei auch Windows Tools wie Active Directory verwenden kann.

1
Bin am Lernen

Naja,

wenn man einst DOS gelernt hat,

kommt einem das schon leicht von den Fingern.

Wobei [F1] die zur wichtigen Taste wird,
wenn man die Syntax wieder mal verhaut hat.

Aber man muss immer wieder auffrischen und dazu lernen.

Ist halt irgendwie aus der Steinzeit, aber man kommt (fast) an Alles ran.

Wo es hieß: Aufschreiben ist gut fürs Merken.

Da hat man mit Linux bessere Möglichkeiten.

Hansi

Woher ich das weiß:Studium / Ausbildung