Batch-Programmierung: Beispiele

Aus Wikibooks
  1. Nummerierter Listeneintrag


Regedit.exe[Bearbeiten]

Eine kleine Batchdatei, um mit regedit.exe direkt einen bestimmten REG-Zweig anzuspringen:

set LastKey="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix"

set Key=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit
reg add %Key% /f /v "LastKey" /d %LastKey%
start regedit.exe

Erläuterung:

  • LastKey ist der Reg-Schlüssel, der als Letztes angezeigt wurde und dieser wird beim Start von regedit direkt angesprungen, diesen Schlüssel kann man nach Belieben anpassen.
  • Key ist der Reg-Schlüssel in dem sich der Wert "LastKey" befindet.

LastKey wird mittels reg add in die Registry eingespielt und danach wird regedit gestartet. Das Ganze funktioniert allerdings nur, wenn regedit.exe noch nicht läuft.

Und hier noch eine kleine Batchdatei, um mit regedit.exe Werte aus der Registry auszulesen:

set Key="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit"
regedit.exe /e c:\temp\inhalt.reg %Key%

Achtung! Die Datei inhalt.reg ist im Unicode-Format. Ein Tipp dazu: Der type-Befehl kann Unicode lesen.

TaskList-Abfrage[Bearbeiten]

Eine Routine um das Laufen eines Prozesses mittels tasklist.exe festzustellen. In diesem Beispiel wird geprüft, ob Prozess.exe läuft.

 @echo off
 set ProgEXE=Prozess.exe
 set tempdatei=%temp%\TempDatei.txt

 tasklist /FI "IMAGENAME eq %ProgEXE%" /FO CSV>%tempdatei%

 for /F "skip=2 tokens=1 delims=," %%f in (%tempdatei%) do (
    echo gefiltert: [%%f]
    if "%%f"==""%ProgEXE%"" echo Prozess %ProgEXE% läuft
    goto ende
 )
 echo Prozess %ProgEXE% läuft nicht!
 goto ende

 :ende
    del %tempdatei%


Alternativ, ohne obige temporäre Datei 'tempdatei' zu benötigen, kann man beispielsweise unter Windows XP folgendes verwenden:

TaskList /FI "IMAGENAME eq %ProgEXE%" 2>NUL | Find "%ProgEXE%" >NUL
IF %ERRORLEVEL% == 1 (
  ECHO NOT Running.
  GOTO Ende
  ) ELSE (
    ECHO Running.
    GOTO Ende
    )

Dienste einrichten[Bearbeiten]

@echo off
prompt -$G
echo.
echo ### Manuelle Dienste ###
echo.
call:M helpsvc		"Hilfe und Support"
call:M ImapiService	"IMAPI-CD-Brenn-COM-Dienste"

echo.
echo ### nicht benötigte Dienste Deaktivieren ###
echo.
call:D cisvc		"Indexdienst"
call:D ERSvc		"Fehlerberichterstattungsdienst"


echo.
echo ### Automatische Dienste ###
echo.
call:A CryptSvc     "Kryptografiedienste
call:A MSIServer	"Windows Installer"


echo.
echo.
echo Fertig!
echo.
pause
goto:eof


:A
echo %2 auf Automatisch
set Parameter=auto
net start %1
goto machen

:M
echo %2 auf Manuell
set Parameter=demand
net stop %1
goto machen

:D
echo %2 auf Deaktiviert
set Parameter=disabled
net stop %1
goto machen


rem Systemstart		Gerätetreiber, der vom Startladeprogramm geladen wird.
rem system		Gerätetreiber start während der Kernelinitialisierung.
rem auto		automatischer start, nach systemstart, vor Benutzeranmeldung.
rem demand		Dienst, der manuell gestartet werden muss.
rem disabled		Dienst deaktivieren


:machen
	echo on
	sc config %1 start= %Parameter%
	@echo off
	echo.
	echo.
goto:eof

Windows XP SP2: installierte Patches/Updates auflisten[Bearbeiten]

Zeigt unter Windows XP mit Service Pack 2 alle zusätzlich installierten Patches/Updates an.

@echo off

set RegHotfixListe=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix

set RegHotfixInfo=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP3

for /F "delims=\ tokens=7" %%f in ('reg query "%RegHotfixListe%"') do (
    set HotFixNr=%%f
    CALL :Anzeigen
)

echo.
echo.
pause
goto:eof




:Anzeigen
    reg query "%RegHotfixListe%\%HotFixNr%" /v Installed | FIND "0x1">NUL
    if "%errorlevel%"=="0" (
            set installiert=ja
            call:KB_Info
        ) ELSE (
            set installiert=nein
        )

    echo %HotFixNr% - Ist Installiert: %installiert%
    if not "%InstalledBy%"==""   echo %HotFixNr% installiert von %InstalledBy%
    if not "%InstalledDate%"=="" echo %HotFixNr% am %InstalledDate%
    echo.
goto:eof





:KB_Info
    set InstalledBy=
    for /F "tokens=3" %%c in ('reg query "%RegHotfixInfo%\%HotFixNr%" /v InstalledBy 2^>NUL ^| FIND "InstalledBy"') do (
        set InstalledBy=%%c
        )
    set InstalledDate=
    for /F "tokens=3" %%c in ('reg query "%RegHotfixInfo%\%HotFixNr%" /v InstalledDate 2^>NUL ^| FIND "InstalledDate"') do (
        set InstalledDate=%%c
        )
goto:eof

Printdateien direkt an den Drucker senden[Bearbeiten]

Sendet einzelne Druckdateien an im Netzwerk freigegebene Drucker. Eignet sich besonders bei Standard Drucksprachen wie Postscript und HPGL/2.

@echo off
rem "pl.bat" sendet einzelne Druckdateien an bel. Drucker direkt.
rem eignet sich besonders bei Standard Drucksprachen wie Postscript und HPGL/2.
rem Laesst sich in Windows bequem einbinden, z.B rechte Maustaste - Senden an Plotter

:voreingestellt
    set server=192.168.0.5
    rem server --- IP von Printserver/oder Name von Freigaberechner ---
    set druckerbeschreibung=192.168.0.5 Freigabename EPSON
    rem druckerbeschreibung --- damit der Drucker leichter identifiziert werden kann ---
    set drucker=EPSONNT
    rem drucker --- das muss der Freigabename im Netzwerk/auf dem Freigaberechner sein ---
    
    if '%1' == 'drucker01' goto drucker01
    if '%1' == 'drucker02' goto drucker02
    if '%1' == 'canon' goto canon
goto datei

:drucker01
    shift
goto datei

:drucker02
    set server=42.1.1.240
    set druckerbeschreibung=HP DJ 755CM im Sekretariat
    set drucker=hpdj755-tcp
    shift
goto datei

:canon
    set server=192.168.0.1
    set druckerbeschreibung=Canon s/w Laser im EG
    set drucker=CanonLBP
    shift
goto datei

:datei
    if '%~1' == '' goto aufruf
goto plot

:plot
    echo.
    echo Dateiname   : %1
    echo Druckserver : %server%
    echo Freigabename: %drucker%
    echo Beschreibung: %druckerbeschreibung%
    echo.
    print /d:\\%server%\%drucker% '%~1'
goto:eof

:aufruf
echo.
echo    aufruf  : pl [plotter] Datei
echo    plotter : drucker01, drucker02, canon, (voreingestellt ist drucker01)
echo.

Anmerkung zur Nutzung dieses Scriptes:

  • Der Printbefehl schickt die Datei OHNE Interpretation direkt an den Drucker. Eine Bilddatei im JPEG-Format würde statt der Grafik also lediglich einen haufen wirrer Zeichen ergeben.
  • Der Drucker muss in der Lage sein, selbst ASCII-Zeichen zu verarbeiten und auszugeben. Dies ist bei älteren Druckern (vor ca. 1996 sicher) immer der Fall. Heute beherrschen meist nur noch PostScript-fähige Drucker diese Fähigkeit. "Billigen" GDI-Druckern muss man etwas auf die Sprünge helfen mit dem verwendeten "Druckprozessor" im Windows-Druckertreiber.


  • Zum Umschalten zunächst die Druckerübersicht öffnen - Zu finden unter Start|Drucker und Faxgeräte
  • Dann die Eigenschaften des gewünschten Druckers ausrufen (Rechtsklick|Eigenschaften)
  • Auf dem Reiter "Erweitert" den Button "Druckprozessor..." klicken
  • In dem erscheinenden Dialogfeld gibt es 2 Felder mit Einträgen. Im rechten Feld (Standartdatentypen) findet sich neben verschiedenen anderen auch der Eintrag "Text". Diesen markieren und dann alles mit OK wieder schließen.


Der Druckprozessor von Windows ist nun in der Lage, Ausgaben entsprechend zu Interpretieren und dem GDI-Drucker als Grafik zu liefern. Es können aber nur stur 80 Zeichen (maximal) auf ca. 60 Zeilen verteil werden. Manchmal sind es bis zu 66 Zeilen.

Copy[Bearbeiten]

Kopieren von Dateien.

Der Befehl
 copy test.txt c:\temp
kopiert die Datei test.txt aus dem aktuellen Ordner in den Ordner c:\temp.
Der Befehl
 copy c:\test.txt c:\temp
kopiert die Datei test.txt aus dem Ordner c:\ in den Ordner c:\temp

Datei- und Pfadnamen mit Sonderzeichen ( hier das Leerzeichen sowie ()[]{}^=;!'+,`~ ) müssen beim Copy=Kommando und den meisten anderen Kommandos in doppelten Anführungszeichen (") angegebenen werden, zum Beispiel:

copy f:\Beispiel.cmd "c:\Dokumente und Einstellungen\Siegfried\Eigene Dateien\" 

Wie man sieht, kann man beide Schreibweisen mischen. Dagegen können sich mehrfach vorhandene Anführungszeichen wieder aufheben. Deshalb müssen vom Benutzer angegebene Anführungszeichen erst entfernt werden, bevor man in der eigenen Batchdatei neue setzt:

@echo off
echo Kopiert eine Datei in das eigene Benutzerprofil.
rem Die Anführungszeichen in der folgenden Zeile werden nur benötigt,
rem damit zwischen dem Doppelpunkt und der Eingabe ein Abstand entsteht.
set /p name="Bitte geben Sie einen Dateinamen an: "
rem In der folgenden Zeile werden alle Anführungszeichen entfernt, da
rem nach dem Gleichheitszeichen kein Ersattext folgt, siehe auch set/?. 
rem Das Set-Kommando kommt sowohl beim Variablennamen als auch beim
rem Inhalt ohne Anführungszeichen aus.
set name=%name:"=%
rem An dieser Stelle sollte erst geprüft werden, ob die Datei überhaupt
rem existiert, aber das würde den Rahmen hier sprengen.
copy "%name%" "%HOMEDRIVE%%HOMEPATH%\Eigene Dateien"

Theoretisch könnte man auch mit den kurzen Dateinamen (8+3) arbeiten, aber diese sind nicht eindeutig und können von Laufwerk zu Laufwerk unterschiedlich sein. Daher besser nicht verwenden!

Kombiniert in der gegebenen Reihenfolge zwei oder mehrere durch "+" verbundene Textdateien in einer neuen Gesamtdatei.

In diesem Zusammenhang muss auf die Bedeutung der Parameter "/A" (für ASCII-Format, der Standardwert) und "/B" (für Binär-Format ) eingegangen werden, die jedem Dateinamen in obigem Beispiel mit einem Leerzeichen Abstand vorangehen können. DOS-Textdateien enthalten ein Dateiendezeichen (Dezimal 26, Hexadezimal 1A). Beim Kopiervorgang darf in der Gesamtdatei nur als letztes Zeichen ein Dateiendezeichen erscheinen, sonst würde der Text nach der ersten Endmarkierung nicht mehr angezeigt. "copy" kopiert ohne das abschließende Zeichen und fügt als letztes wieder eines zur Gesamtdatei hinzu.

Möchte man Dateien mit binären Inhalten zusammenfügen (z.B. PostScript-Dateien, die auch binäre Abschnitte enthalten können), so würde ohne Parameter "/B" ebenfalls nur bis zu einem zufällig vorkommenden Dateiendezeichen kopiert und damit das Ergebnis unbrauchbar.

copy /b "seite 1.ps" + /b "seite 2.ps" "Neue Datei.ps"

Als Zieldatei sollte man keine der Quelldateien verwenden, da möglicherweise sonst der Inhalt überschrieben wird.

Message-Ping[Bearbeiten]

Mit Hilfe des folgenden Scripts kann man Windows um eine nützliche Funktionalität erweitern. Mit Hilfe von mping erhält man eine Nachricht, sobald der gepingte Computer wieder erreichbar ist.

Um das Script global zu verwenden, muss es z.B. als "mping.cmd" in "Windows-Installationsordner\System32" gespeichert werden und kann von nun an z.B. mit "mping google.com" aufgerufen werden.

@echo off

:: wenn kein remote Host angegeben ist, dann gehe zu :Syntax
IF [%1]==[] GOTO Syntax
IF [%1]==[/?] GOTO Syntax
IF [%1]==[/h] GOTO Syntax
IF [%1]==[/help] GOTO Syntax

:mainloop
:: pinge den Host 1 mal und leite die Ausgabe nach 'nul' um (keine sichtbare Ausgabe)
ping %1 -n 1 >nul

:: speichere den Errorlevel in die Variable 'status'
set status=%errorlevel% 

:: sende eine Nachricht sobald der remote Host online ist 
if %status%==0 (msg %username% %1 online && exit 0)

:: minimalistische Fortschrittsanzeige
(Set /P i=.) < NUL

:: sleep workaround über eine hypothetische Auswahl, die nach 30 Sekunden automatisch beantwortet wird.
:: Wer vorher X drückt, kann den Ablauf auch beschleunigen.
:: Die Variante ist meiner Meinung nach besser als 'ping localhost -n 10 >nul'
:: ab windows 7 aufwärts geht auch 'TIMEOUT /T 10 /NOBREAK > nul'
:: (timeout sekunden /NOBREAK verhindert abbrechen durch tastendruck)
choice /T 30 /N /C X /D X > NUL

:: gehe zurück zum anfang
goto mainloop

:Syntax
echo.
echo Syntax:  %~n0 [Hostname oder IP]
echo.
echo mping
echo.
echo Pingt einen offline Host und gibt eine Meldung 
echo aus, sobald er wieder online ist
echo.

Defrag mit Endlos-Schleife[Bearbeiten]

Das eingebaute Defrag-Tool erlaubt ja immer nur die gleichzeitige Defragmentierung eines Laufwerks. Außerdem sind oftmals mehrere Durchgänge nötig, bis das Laufwerk wirklich vollständig defragmentiert ist. Mit dieser kleinen Batch Datei werden alle Partitionen immer wieder hintereinander defragmentiert. Wenn man wieder arbeiten will, kann man einfach das Eingabefenster schließen. Auch bei laufendem defrag passiert dabei nichts, weil defrag im Hintergrund die aktuelle Arbeit sauber beendet.

Damit aber nicht defekte Laufwerke einfach blind defragmentiert werden, habe ich eine etwas aufwendige Prozedur eingebaut, die die Laufwerke mit chkdsk erst überprüft. Wenn dabei ein Fehler auftritt, wird mit fsutil das dirty Bit gesetzt. Das bewirkt, dass beim nächsten Systemstart die Fehler behoben werden. Außerdem werden die Partitionen in dem loop ausgelassen, welche schon als dirty markiert sind.

Eine kleine Routine war auch nötig, damit Netzwerklaufwerke ausgelassen werden.

@echo off
cd /d C:\

:loop
    for %%i in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
        if exist %%i:\NUL call:defrag %%i
    )
    echo.
    echo pause...
    :: Vorherige Variante 'ping localhost -n 10 >NUL'
    choice /t 30 /n /c x /d x >NUL
goto loop

:defrag
    call:check %1
    if "%ok%"=="nein" (
        echo Laufwerk %1: wird ausgelassen
        echo.
        goto:eof
    )
    echo.
    echo.
    echo chkdsk %1: /v
    chkdsk %1:
    if %errorlevel% NEQ 0 (
        if %errorlevel% NEQ 2 (
            echo %1: chkdsk Fehler!!!
            echo Errorlevel: %errorlevel%
            echo.
            echo setzte dirty-Bit:
            fsutil dirty set %1:
            echo.
            echo Versuche Reparatur
            chkdsk %1: /v /x
            if %errorlevel% EQU 2 (
                echo Fehler bereinigt!
            ) else (
                echo Errorlevel: %errorlevel%
                echo.
                goto:eof
              )
        )
    )
    echo defrag %1: -f
    defrag %1: -f
    if %errorlevel% NEQ 0 (
        pause
        exit
    )
    rem pause...
    ping localhost -n 1 >NUL
goto:eof

:check
    set ok=nein
    net use | find /i "%1:" >NUL
    if not errorlevel 1 (
        echo %1: ist ein Netzlaufwerk
        goto:eof
    )
    fsutil dirty query %1:
    for /F "tokens=5" %%f in ('fsutil dirty query %1:') do (
        if not "%%f"=="NICHT" (
            rem Laufwerk ist als fehlerhaft markiert
            goto:eof
        )
    )
    set ok=ja
goto:eof

Als Alternative gibt es das Open Source Program JkDefrag, welches auch alle Laufwerke nacheinander defragmentiert.

Dateiinformationen anzeigen[Bearbeiten]

Dieses Batch-Skript zeigt Informationen über die Datei, die als Parameter übergeben wird, an. (beispielsweise per Drag&Drop auf die Batch-Datei)

@echo off
echo Attribute...................: %~a1
echo Laufwerk....................: %~d1
echo kompletter Pfad.............: %~f1
echo Dateiname...................: %~n1
echo Ordnerpfad..................: %~p1
echo kompletter Pfad (kurze Form): %~s1
echo Aenderungsdatum.............: %~t1
echo Dateierweiterung............: %~x1
echo Dateigroesse................: %~z1
pause

Hinweis: Falls die Attribute des eigenen Batch-Skripts ausgelesen werden sollen, so muss der Parameter Null verwendet werden (Beispielsweise %~p0). Eine Kombination ist auch möglich, z.B: %~dp0 (Laufwerk + Pfad)

Alle verfügbaren PCs im aktuellen Netzwerk suchen[Bearbeiten]

Dieses Batch-Skript pingt alle IP-Adressen eines IP-Bereichs an und zeigt dann die PCs an, die verfügbar sind.

@echo off

if exist ips.txt del ips.txt > nul

echo Bitte geben Sie den ersten Teil der IP ein:
set /p ip=

for /L %%N IN (1, 1, 255) DO (
	echo Die IP: %ip%%%N wird nun angepingt
	ping %ip%%%N -n 1 -w 1 | find "TTL" && echo %ip%%%N >> ips.txt
)

cls
type ips.txt
pause >nul

Hinweis: Die Datei ips.txt wird nicht gelöscht, damit man sie für weitere Zwecke benutzen kann.



Hosts Datei mit einem Aliasnamen und der aktuellen IP-Adresse aktualisieren[Bearbeiten]

Häufig werden Webserver oder ähnliche Programme unter Angabe eines Aliasnamens installiert, damit sie leicht auf einen anderen Rechner verschoben werden können, falls der ursprüngliche Rechner defekt ist. Oder die Aplikation läuft unter VM-Ware auf einen Laptop bei dem sich die IP-Adressen häufig ändern. Dann kann mit dem Skript der Hostnamenalias mit der aktuellen IP-Adresse aktualisiert werden. Idealerweise wird das Script automatisch beim Start von Windows oder beim Anmelden des Anwenders ausgeführt.

@echo off
set HOST_ALIAS=myserver myserver.mydomain.org
set HOST_FILE=%SystemRoot%\System32\drivers\etc\hosts
set TEMP_FILE=%TEMP%\hosts.tmp

REM vorhandenen Eintrag entfernen und den Rest in TEMP-Datei schreiben
type %HOST_FILE% | find /v "myserver" > %TEMP_FILE%

REM Neuen Eintrag wieder hinzufügen
for /F "tokens=15" %%i in ('ipconfig ^| find "IP Ad"') do set IP=%%i
echo %IP% %HOST_ALIAS%>>%TEMP_FILE%
echo ## Added %IP% %HOST_ALIAS% to the hostsfile

REM Temp-File nach %SystemRoot%\System32\drivers\etc\hosts kopieren
REM Die Datei Hosts darf nicht mit "move" verschoben werde, sondern muss kopiert werden, da sonst der Hostname nicht gefunden werden kann.
copy /y %TEMP_FILE% %HOST_FILE%
del /F /Q %TEMP_FILE%

Windowsversion herausfinden[Bearbeiten]

Mit dieser Batchdatei findet man heraus, welche Windowsversion verwendet wird. Das ist nützlich, wenn man mit bestimmten Pfaden arbeitet, die je nach Betriebssystem verschieden sind. Quelle

@echo off

rem diese Batch prueft das OS

VER |find /i "Windows 95" >NUL
IF NOT ERRORLEVEL 1 GOTO 95
VER |find /i "Windows 98" >NUL
IF NOT ERRORLEVEL 1 GOTO 98
VER |find /i "Windows Millennium" >NUL
IF NOT ERRORLEVEL 1 GOTO ME
VER | find "XP" > nul
IF %errorlevel% EQU 0 GOTO XP
VER | find "2000" > nul
IF %errorlevel% EQU 0 GOTO 2000
VER | find "NT" > nul
IF %errorlevel% EQU 0 GOTO NT
VER | find "Microsoft Windows [Version 6.0" > nul
IF %errorlevel% EQU 0 GOTO Vista
VER | find "Microsoft Windows [Version 6.1" > nul
IF %errorlevel% EQU 0 GOTO W7
VER | find "Microsoft Windows [Version 6.2" > nul
IF %errorlevel% EQU 0 GOTO W8
VER | find "Microsoft Windows [Version 6.3" > nul
IF %errorlevel% EQU 0 GOTO W81
VER | find "Microsoft Windows [Version 5" > nul
IF %errorlevel% EQU 0 GOTO 2003
goto unknown
goto end

:unknown
echo unknown
goto end

:95
echo 95
goto end

:98
echo 98
goto end

:ME
echo ME
goto end

:NT
echo NT
goto end

:2000
echo 2000
goto end

:XP
echo XP
goto end

:Vista
echo Vista
goto end

:W7
echo W7
goto end

:W8
echo W8
goto end

:W81
echo Windows 8.1
goto end

:2003
echo 2003
goto end

:end

Alternative:

@ECHO OFF
FOR /F "tokens=2 delims=[]" %%a IN ('VER') DO FOR /F "tokens=2" %%b IN ("%%a") DO SET VersionNumber=%%b

FOR /F "tokens=1 delims=." %%a IN ("%VersionNumber%") DO SET VersionMajor=%%a
FOR /F "tokens=2 delims=." %%a IN ("%VersionNumber%") DO SET VersionMinor=%%a
FOR /F "tokens=3 delims=." %%a IN ("%VersionNumber%") DO SET VersionBuild=%%a

IF %VersionMajor%==6 (
	IF %VersionMinor%==4 (
		SET VersionName=Windows 10
	) ELSE (
	IF %VersionMinor%==3 (
		SET VersionName=Windows 8.1
	) ELSE (
	IF %VersionMinor%==2 (
		SET VersionName=Windows 8
	) ELSE (
	IF %VersionMinor%==1 (
		SET VersionName=Windows 7
	) ELSE (
	IF %VersionMinor%==0 (
		SET VersionName=Windows Vista
	)))))
) ELSE (
IF %VersionMajor%==5 (
	IF %VersionMinor%==2 (
		SET VersionName=Windows Server 2003
	) ELSE (
	IF %VersionMinor%==1 (
		SET VersionName=Windows XP
	) ELSE (
	IF %VersionMinor%==0 (
		SET VersionName=Windows 2000
	)))
) ELSE (
IF %VersionMajor%==4 ( ECHO 4
	IF %VersionMinor%==90 (
		SET VersionName=Windows ME
	) ELSE (
	IF %VersionMinor%==10 (
		SET VersionName=Windows 98
	) ELSE (
	IF %VersionBuild%==1381 (
		SET VersionName=Windows NT 4.0
	) ELSE (
	IF %VersionMinor%==00 (
		SET VersionName=Windows 95
	))))
) ELSE (
IF %VersionMajor%==3 (
	SET VersionName=Windows 3.1
))))

ECHO %VersionNumber%
ECHO %VersionMajor%.%VersionMinor%.%VersionBuild%
ECHO %VersionName%
PAUSE

TEMP-Verzeichnis löschen[Bearbeiten]

Im %TEMP%-Verzeichnis sammeln sich mit der Zeit viele Dateien und Unterverzeichnisse an. Mit diesem Skript werden alle auf einmal gelöscht:

@echo off

call:clean %TEMP%
IF NOT "%TEMP%" == "%TMP%" (
    call:clean %TMP%
)

pause
goto:eof

:clean
    del /q "%~1\*.*"
    FOR /D %%D IN ("%~1\*") DO (
        rmdir /s /q "%%D"
    )
goto:eof

(Wahrscheinlich erhält man ein paar Fehler, wenn z.B. Dateien geöffnet sind)

Neue Version

Eine Version für Win XP/2000/WinVista/Win7

Echo off
del /f /s /q "%HOMEPATH%\Lokale Einstellungen\Temp\*.*"
del /f /s /q "%HOMEPATH%\Lokale Einstellungen\Temporary Internet Files\*.*"
del /f /s /q "%HOMEPATH%\Lokale Einstellungen\Verlauf\*.*"
del /f /s /q "%windir%\Temp\*.*"
del /f /s /q "%windir%\Prefetch\*.*"
del /f /s /q "%windir%\Temp\*.*"
rmdir /s /q "%HOMEPATH%\Lokale Einstellungen\Temp\"
rmdir /s /q "%windir%\Prefetch\"

diskperf -n
ipconfig /flushdns


FLV/MP4/WAV zu MP3 konvertieren (FFMPEG + Batch)[Bearbeiten]

FFMPEG.EXE nach C:\ kopieren und Batch Datei in einem beliebigen Ordner mit FLV/MP4/WAV Dateien anlegen. Sobald die Batch Datei gestartet wird, geht sie alle FLV/MP4/WAV Files durch und encodiert diese als MP3 (VBR ~226 kbit). Am Ende werden alle MP3 Dateien in den Ordner "MP3" verschoben.

 mkdir "MP3"
  FOR %%X IN (*.flv) DO C:\ffmpeg.exe -y -i "%%X" -q:a 0 "%%~nX.mp3"
  FOR %%X IN (*.mp4) DO C:\ffmpeg.exe -y -i "%%X" -q:a 0 "%%~nX.mp3"
  FOR %%X IN (*.wav) DO C:\ffmpeg.exe -y -i "%%X" -q:a 0 "%%~nX.mp3"
  FOR %%X IN (*.mp3) DO MOVE "%%X" "MP3"

Vorteile: Stabil und leistungsstark (FFMPEG + Konsole), keine überladene GUI, man muss keine Bloatware installieren, nutzt Mehrkernprozessoren aus, variable Bitrate, kommt mit Sonderzeichen klar (z.B. "ı"), kopiert nicht nur den Audiostream und Video nach "null" sondern enkodiert alles neu (keine "defekten" MP3s mehr bzw. keine "Sprünge" oder sonstiges mehr)

Einfach den Text in eine Textdatei kopieren und zur .bat machen.