Problem:
Ich wollte per Bacth-Skript den nächsten freien Laufwerksbuchstaben ermitteln.
Lösung:
In den c't FAQs habe ich einen interessanten Artikel und ein Batch-Skript gefunden, dass genau diese Aufgabe löst:
@echo off %debug%
if not "%OS%"=="Windows_NT" exit /b
setlocalset ll=V T R Q P O N M K J I W X Y Z L U S H G F E D
for %%l in (%ll%) do (
set LW=%%l
mountvol %%l: /L >nul
if errorlevel 1 (
subst | findstr /B "%%l:" > nul
if errorlevel 1 (
net use %%l: >nul 2>&1
if errorlevel 1 goto gotone
)
)
)
echo Kein Laufwerksbuchstabe frei
exit /b
:gotoneecho %LW% ist ein freier Laufwerksbuchstabe
Der Laufwerksbuchstabe steht dann in der Variable %LW% zur weiteren Verarbeitung zur Verfügung.
Beispiel mit drei Diensten - kann beliebig erweitert werden!
Es ist möglich das ganze als geplanten Task mehrfach täglich laufen zu lassen!
Alle laufenden Dienste werden in der service.txt gespeichert und dann wird nach den entsprechnden Diensten darin gesucht.
Ist der Dienst nicht gestartet, dann wir er gestartet und ein Eintrag in die ausfall.txt erstellt mit Uhrzeit und Datum!
Die ausfall.txt wird NICHT überschrieben, sondern alle Fehler werden angehängt!
Die service.txt wird bei jedem Aufruf neu generiert!
@echo off
REM --- alle laufende Dienste in service.txt speichern---
net start > service.txt
REM ------------- Überprüfen ob 1.Dienst läuft --------------
find "Designs" service.txt
if errorlevel 1 goto WEG1
if errorlevel 0 goto OK1
:WEG1
REM --- Dienst neu starten und Datum + Uhrzeit festhalten ---
echo Designs %date% %time% >> ausfall.txt
net start "Designs"
goto OK1
REM ---------------------------------------------------------
:OK1
REM ------------- Überprüfen ob 2.Dienst läuft --------------
find "Hilfe und Support" service.txt
if errorlevel 1 goto WEG2
if errorlevel 0 goto OK2
:WEG2
REM --- Dienst neu starten und Datum + Uhrzeit festhalten ---
net start "Hilfe und Support"
echo Hilfe und Support %date% %time% >> ausfall.txt
goto OK2
REM ---------------------------------------------------------
:OK2
REM ------------- Überprüfen ob 3.Dienst läuft --------------
find "Taskplaner" service.txt
if errorlevel 1 goto WEG2
if errorlevel 0 goto OK3
:WEG2
REM --- Dienst neu starten und Datum + Uhrzeit festhalten ---
net start "Taskplaner"
echo Taskplaner %date% %time% >> ausfall.txt
goto OK3
REM ---------------------------------------------------------
:OK3
goto END
:END
Es handelt sich hierbei um eine Lösung für das Brennen mittels NeroCMD in einer Batchfile!
Es wird ein vordefiniertes Verzeichnis mit definierbaren Parametern auf CD gebrannt.
Diese Lösung funkioniert NICHT mit DVDs!
Features:
- Alle Paramter werden über Varaiblen festgelegt
- Einfache Einrichtung
- Batchfile ist ausdokumentiert
Batchfile und NeroCMD.exe sind mit angehängt! ACHTUNG: Ahead Nero muß auf dem Rechner installiert sein!
@echo off
REM Variablen-Erklärung
REM name = Name der CD, die erstellt wird. Hier wird das Datum genommen
REM sv = Name des zu sicherden Verzeichnisses
REM nv = Nero-Verzeichnis, in dem die nerocmd.exe liegt
REM drive = Laufwerksbuchstabe des Brenners
REM Speed = Brenngeschwindigkeit
set name=%date%
set sv="C:\Dokumente und Einstellungen\[BENUTZERNAME]\Desktop\RE_Trash\*.*"
set nv="C:\Programme\Ahead\Nero\nerocmd.exe"
set drive=e
set speed=32
echo Datensicherung
echo.
echo.
echo Der Brennvorgang Ihrer Daten wird gestartet
echo Es wird folgendes Verzeichnis gesichert
echo %sv%
echo.
echo Bitte legen Sie einen leeren CD-Rohling ein...
pause
%nv% --write --drivename %drive% --speed %speed% --iso %name% --create_iso_fs --verify %sv% --recursive
echo Es wurde die Sicherung %name% mit %speed%-facher Geschwindigeit auf dem Laufwerk %drive% erstellt
echo Bitte Überprüfen Sie, ob die Daten auf dem erstellten Datenträger sind.
echo vielen Dank!
[BENUTZERNAME] muss durch ihren Benutzernamen ersetzt werden
Das Batchfile zeigt das letzte LOG-File von NT Backup an. Damit läßt sich leicht der letzte Stand der Sicherung abfragen!
@echo off
setlocal ENABLEDELAYEDEXPANSION
set file=N
set user=%UserProfile%
if {%1} NEQ {} set user=%1
set user=%user:"=%
set folder=%user%\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data
for /f "Tokens=*" %%a in ('dir "%folder%\backup*.log" /b /O-D') do if "!file!" EQU "N" set file=%%a
start "!file!" "%SystemRoot%\notepad.exe" "%folder%\!file!"
endlocal
exit /b 0
Hier nochmal das ganze bei dem das LOG-File in ein Verzeichnis kopiert wird:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set file=N
set user=tfreitag
if {%1} NEQ {} set user=%1
set user=%user:"=%
set folder=C:\Dokumente und Einstellungen\ren-admin\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data
for /f "Tokens=*" %%a in ('dir "%folder%\backup*.log" /b /O-D') do if "!file!" EQU "N" set file=%%a
rem start "!file!" "%SystemRoot%\notepad.exe" "%folder%\!file!"
copy "%folder%\!file!" C:\Freigaben\Technik\Sicherung\%date%.txt
endlocal
exit /b 0
Das nachfolgende Skript stellt eine perfekte Sicherung mit NTBackup da.
Das BKS-File muß mit NTBackup erstellt werden!
Die Namen der Sicherung und des Datenträerppols zum Auswurf des Bandes müssen angepaßt werden!
Alle Daten, die angepaßt werden müssen/können sind kursiv und fettgekennzeichnet
Nach der Sicherung wird eine Auftrags-Mail mit dem Logfile versendet.
@echo off
REM --- neue Inventur
start /wait rsm refresh /LF"Hewlett Packard DAT72 drive"
REM --- schauen, was da ist
start /wait rsm view /tphysical_media
REM --- Datensicherung starten
start /wait C:\WINDOWS\system32\ntbackup.exe backup "@C:\Dokumente und Einstellungen\ren-admin\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows
NT\NTBackup\data\Voll_BAMSDC010.bks" /n "%date% Vollsicherung BAMSDC010" /d "%date% Vollsicherung BAMSDC010" /v:yes /r:no /rs:no /hc:on /m normal /j "Voll_BAMSDC010" /l:s /p "4mm DDS" /UM
REM --- Band auswerfen
REM Auswurf des Bandes, Medianame muss genau dem Name des Bandes entsprechen
rsm eject /LF"Hewlett Packard DAT72 drive"
REM --- Sicherungslog als Mail versenden
setlocal ENABLEDELAYEDEXPANSION
set file=N
set user=tfreitag
if {%1} NEQ {} set user=%1
set user=%user:"=%
set folder=C:\Dokumente und Einstellungen\ren-admin\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data
for /f "Tokens=*" %%a in ('dir "%folder%\backup*.log" /b /O-D') do if "!file!" EQU "N" set file=%%a
rem start "!file!" "%SystemRoot%\notepad.exe" "%folder%\!file!"
c:\mail-as-batch.exe -smtp 192.168.100.80 -from Backup@mr-daten.de -to rbamberg@mr-daten.de -s Sicherung BAMSDC010 -body "%folder%\!file!"
endlocal
exit /b 0
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”