Diskussion:Batch-Programmierung: Batch-Befehle

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Sachen, die IMHO fehlen[Bearbeiten]

  • Sprünge
       :BLA
       Befehl 1
       ...
       Befehl n
       GOTO BLA
      
  • Verzweigungen
    • mit if
           ...
           IF EXIST lockfile GOTO wait
           ...
          
    • mit Variablen
           ...
           GOTO Entscheidung%Zahl%
           ...
          
  • Schleifen im Windows XP- Style:
       FOR /L %X in (1,1,100) DO @echo %X 
      
  • xcopy
       xcopy c:\Eigene~1 d:\sicher /D /E /Y /I
      
Kleidersack
IF ist doch vorhanden ??? --Author 13:42, 2. Jun. 2007 (CEST)

Benutzereingaben mit ECHO[Bearbeiten]

Mit Hilfe des echo können Sie auch Benutzereingaben durchführen. Dies wird mit Hilfe des Pipe-Operators | durchgeführt, wobei /q für Schnellformatierung steht.
Beispiel formatieren eine Diskette ohne Nachfrage:

echo.|format a: /q

Dieser Befehl funktioniert nicht! Zumindest /v "Test" musst du noch dazuschreiben, sonst hängt der PC. Wie wäre es das nächste Mal mit Ausprobieren, bevor du etwas veröffentlichst? -- Worker 10:30, 9. Jan 2006 (UTC)

Hallo bevor du unterstellst es würde nicht funktionieren wäre eine Nachfrage auf meiner Diskussionsseite nett! Außerdem funktioniert echo. bei mir sehr wohl unter WinNT 4 - ich habe SP 6a am laufen was läuft bei dir??? Hier mein Ergebnis zum format:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Dokumente und Einstellungen\Bastie>echo.|format a: /q
Legen Sie eine neue Diskette in Laufwerk A: ein,
und drücken Sie die EINGABETASTE. Der Typ des Dateisystems ist FAT.
Formatieren mit Schnellformatierung 1.44 MB
Die Dateizuordnungstabelle (FAT) wird initialisiert...
Volumebezeichnung (11 Zeichen, EINGABETASTE für keine)? Formatieren beendet.


    1.702.400 Bytes Speicherplatz auf dem Datenträger insgesamt
    1.702.400 Bytes auf dem Datenträger verfügbar

          512 Bytes in jeder Zuordnungseinheit
        3.325 Zuordnungseinheiten auf dem Datenträger verfügbar

           12 Bits in jedem FAT-Datensatz.

Volumenummer: 9C97-297C

Weiteren Datenträger mit Schnellformatierung formatieren (J/N)?
C:\Dokumente und Einstellungen\Bastie>

--Bastie 14:01, 14. Jan 2006 (UTC)

Befehl "Exit"[Bearbeiten]

Mit "exit /b" kann der ERRORLEVEL-Wert beim beenden gesetzt werden.

mfg, pgf

Variablen[Bearbeiten]

Man kann statt %0% auch %0 verwenden, so ist das nicht. --Azaël 13:23, 18. Nov. 2008 (CET)

Der Abschnitt Variablen ist m.E. unzureichend dargestellt, daher einiges in Stichpunkten, ich werde den Text überarbeiten nach entsprechenden Rückmeldungen hier:

  • Variable sind meist Umgebungsvariable, wie sie seit den Anfangszeiten von DOS und davor schon in UNIX gibt, es ist ein altes bewährtes Konzept. Dasselbe wie auch in LINUX.
  • Umgebungsvariable werden mit set NAME=value gesetzt und sind jeweils in der gegebenen cmd-(shell-)-Ebene und allen darin gerufenen Ebenen gültig, nicht aber Gesamt-Systemweit (!). Damit ist es möglich, in einem batch eine Systemvariable einfach zu überschreiben, ohne Auswirkung auf das Gesamtsystem.
  • Zugriff auf Umgebungsvariable in Batches mit %NAME%, wie im Artikel auch dargestellt.
  • Anzeige aller Umgebungsvariable mit cmd SET
  • Es gibt Standard-Umgebungsvariable, die vom Betriebssystem bzw. beim Hochlauf gesetzt werden. Diese sollte man nutzen aber nicht überschreiben, dazu gehört das %OS% und %VER%, was im Artikel dargestellt ist, aber auch %PATH%, usw.usf.
  • Eine Aufzählung aller Standard-Umgebungsvariable mit Angabe der Betriebssystemversionen wäre günstig.
  • Variable, die syntaktisch wie Umgebungsvariable angesprochen werden, aber nur im Kontext von Batch-Programmen gültig sind, sollten dann aufgezählt werden. Das sind die im Artikel so bezeichneten Scriptvariablen. Diese findet man nicht in der Ausgabe von >set, das ist der exakte Unterschied.

Die Varianten der Verarbeitung von Umgebungsvariablen (Substring usw.) sind im Artikel gut dargestellt.

Ich verwende oft eine Umgebungsvariable %CD%, das ist das Current Directory, diese gehört offensichtlich zu den Scriptvariablen, weil sie einerseits nicht bei SET auftaucht, andererseits ihr Wert von der aktuellen Stellung des current directory abhängt. Ich weiß aber nicht ab welcher Windows-Version es diese gibt. Daher habe ich hier im Artikel gesucht - und nicht gefunden. JcHartmut 13:36, 12. Dez. 2009 (CET)


Die Nummer mit %CD% finde ich erstaunlich: diese Variable wird nicht mit SET angezeigt, und bei SET CD kommt "... ist nicht definiert." Mit SET CD=blablasülz kann ich die Variable überschreiben, sie wird dann sowohl mit SET als auch mit SET CD mit "blablasülz" angezeigt ... Komisch ... Aber interessant ist das schon, sollte man diese Variable nicht doch aufnehmen?

--Hilli0103 01:45, 15. Apr. 2017 (CEST)

Hinweis zu UND bzw. ODER Verknüpfung[Bearbeiten]

Ansonsten hilft nur noch der Workaround mit einem Goto-Befehl.
 set A=true
 set B=false 
 if "%A%"=="true" call :A
 goto eof
 :A
 if "%B%"=="true" ( 
    echo A und B sind beide TRUE
    ) else ( 
     echo entweder A oder B sind nicht = TRUE 
    )

Wenn nämlich bereits A=false, gibt es gar keine Ausgabe. Hier eine andere Herangehensweise (für ODER):

REM A und B sind variable Bedingungen; C ist immer false.
set A=false
set B=true
set C=false
IF "%A%"=="true" set C=true
IF "%B%"=="true" set C=true
echo Ergebnis: A ODER B ist %C%

Ohne vorher in die Diskussion zu schauen habe ich diese Herangehensweise für UND und ODER rücksichtslos im Artikel eingefügt und das alte Beispiel aus dem gleichen Grund entfernt. Zajo 00:53, 28. Mär. 2012 (CEST)

for ... in (...) do cmd /K ( mehrere Befehle ???)[Bearbeiten]

Im Artikel könnte man meinen dass nach einem for ... in eine mehrzeilige Befehlszeile folgen könne. Kann das jemand unter Win7 mit Beispiel bestätigen? Mir will es nicht gelingen. -- ‎213.54.170.88 16:02, 22. April 2013 (Signatur nachgetragen von: Jürgen 17:25, 22. Apr. 2013 (CEST) -- bitte künftig mit 4 Tilden ~~~~ selbst erledigen)

START Befehl[Bearbeiten]

Habe fast keine Ahnung von Shell-Programmierung und habe durchs Googeln den START Befehl gefunden: http://stackoverflow.com/questions/8177695/how-to-wait-for-a-process-to-terminate-to-execute-another-process-in-batch

Fehlt der in dieser Liste nicht? -- ‎89.183.11.94 16:53, 17. Mär.. 2019 (Signatur nachgetragen von: Jürgen 16:10, 24. Feb. 2015 (CET)-- bitte signiere deine künftigen Beiträge selbst mit 4 Tilden ~~~~)

Nein, der fehlt nicht – der wichtige Hinweis oben auf der Seite sagt sowieso, dass die Liste nicht vollständig ist. Bei START handelt es sich nicht um einen Befehl speziell für die Batch-Programmierung, sondern um ein eigenständiges Kommando und wird in Wichtige DOS-Kommandos behandelt. Durch die Suchen-Funktion auf der Startseite wird auch darauf verwiesen. -- Jürgen 16:10, 24. Feb. 2015 (CET)

Sollte nicht der Start Befehl mit den Optionen gelistet werden. Dazu habe ich folgendes im Internet gefunden. Kenne mich aber nicht mit WIKI aus um das einzufügen.

Start

 Startet ein gesondertes Fenster Eingabeaufforderung, um ein angegebenes Programm oder einen angegebenen Befehl auszuführen. Ohne Parameter öffnet start ein zweites Fenster mit einer Eingabeaufforderung.

 Syntax
 start ["Titel"] [/dPfad] [/i] [/min] [/max] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/wait] [/b] [Dateiname] [Parameter]

 Parameter:

 "Titel" 
 Gibt den in der Titelleiste des Fensters Eingabeaufforderung anzuzeigenden Titel an

 /dPfad 
 Das Anfangsverzeichnis. 

 /i 
 Leitet die Startumgebung von Cmd.exe an das neue Fenster Eingabeaufforderung weiter. 

 /min 
 Startet ein neues minimiertes Fenster Eingabeaufforderung. 

 /max 
 Startet ein neues maximiertes Fenster Eingabeaufforderung. 

 /separate 
 Startet 16-Bit-Programme in einem separaten Speicherbereich. 

 /shared 
 Startet 16-Bit-Programme in einem freigegebenen Speicherbereich. 

 /low 
 Führt die Anweisung in der IDLE-Prioritätsklasse aus. 

 /normal 
 Führt die Anweisung in der NORMAL-Prioritätsklasse aus. 

 /high 
 Führt die Anweisung in der HIGH-Prioritätsklasse aus. 

 /realtime 
 Führt die Anweisung in der REALTIME-Prioritätsklasse aus. 

 /abovenormal 
 Startet eine Anwendung in der ABOVENORMAL-Prioritätsklasse.

 /belownormal 
 Startet eine Anwendung in der BELOWNORMAL-Prioritätsklasse. 

 /wait 
 Startet die Anwendung und wartet, bis die Anwendung beendet wird. 

/b
Startet ein neues Fenster, ohne ein neues Fenster Eingabeaufforderung zu öffnen.STRG+C wird nicht behandelt, sofern die Anwendung diese Behandlung nicht aktiviert. Verwenden Sie STRG+UNTBR, um die Anwendung zu unterbrechen.

 Dateiname 
 Bestimmt das auszuführende Programm oder den auszuführenden Befehl. 

 Parameter 
 Gibt die Parameter an, die an den Befehl oder das Programm übergeben werden sollen.

-- ‎217.91.52.191 10:35, 17. Mär.. 2019 (Signatur nachgetragen von: Jürgen 10:59, 10. Mär. 2015 (CET)-- bitte signiere deine künftigen Beiträge selbst mit 4 Tilden ~~~~)

Kann es sein, dass Lesen nicht zu deinen Stärken gehört (unabhängig davon, ob ‎217.91.52.191 und 89.183.11.94 identisch sind oder nicht)? 8-] In meiner obigen Antwort vom 24. Feb. 2015 habe ich begründet, dass START nicht in das Kapitel "Batch-Befehle" gehört, sondern stattdessen im Kapitel Wichtige DOS-Kommandos behandelt wird. Wenn ich vergleiche, was dort bereits steht und was du eingetragen haben möchtest, sehe ich fast keine Unterschiede. Du kannst gerne auf der dortigen (!) Diskussionsseite erläutern, was dir an den bisherigen Erklärungen nicht genügt; aber hier muss es heißen: EOD = End Of Discussion. -- Jürgen 10:59, 10. Mär. 2015 (CET)

PUSHD / POPD[Bearbeiten]

... hier ist nur das angeführt, was auch die Hilfe bei PUSHD/? bzw. POPD/? ausspuckt. Über Sinn und Zweck dieser Befehle wird der Suchende im Unklaren gelassen. Ich habe eine Erklärung z. B. unter https://dr-luthardt.de/windows.htm?tip=push gefunden. Darf man hier auf solche Links verweisen oder gar die Inhalte hier einfügen?

--Hilli0103 02:01, 15. Apr. 2017 (CEST)

Hallo Hilli0103, auf einer Diskussionsseite ist ein solcher Link fast immer angemessen. Auf einer Buchseite kommt es darauf an: Als Ergänzung zum eigentlichen Inhalt des Buches – wie bei ENDLOCAL – ist ein Link vor allem dann hilfreich, wenn er noch mehr Erläuterungen oder Beispiele bietet (reine Werbe-Links werden aber abgelehnt). Die Inhalte aus einem "fremden" Link dürfen normalerweise nicht hier eingefügt werden, weil damit das Urheberrecht des "fremden" Autors verletzt würde. Du darfst aber ohne Weiteres das Wissen, das du dir angeeignet hast (und sei es durch die Lektüre dieses Links), mit eigenen Formulierungen hier veröffentlichen, vor allem wenn dieses Wissen kein Spezialwissen eines M$-Programmierers ist. -- Jürgen 08:52, 15. Apr. 2017 (CEST)