Win10-Batch: div. Fragen zur Entwicklung einer chkdsk Batch
Hallo Zusammen,
ich entwickle derzeit für meinen Privatgebrauch und Freunde eine Disk-Management-Batch (chkdsk, defrag, stordiag, sdelete) nach dem NTFS-Health-Modell mit optimierten Befehlszeilen.
Hierzu habe ich ein paar Verständnisfragen:
I. chkdsk (nur NTFS) Parameter /spotfix:
Mein Plan ist es "chkdsk %_DriveLetterX% /V /sdcleanup /spotfix" optimal nutzen zu können, wobei %_DriveLetterX% ein vom User im Vorfeld eingegebener Laufwerksbuchstabe ist (z.B. "C:"). "Geplante Optimierung" (in dfrgui.exe) ist ausgeschaltet. Spotfix greift auf vorherig protokollierte Scanergebnisse zurück und führt eine Reparatur anhand der protokollierten Fehler durch anstatt jede Datei einzeln zu prüfen und führt somit zur Reparatur in höchstmöglicher Geschwindigkeit. Nun wüsste ich gerne explizit, ob ein im Vorfeld ausgeführtes
hierzu ausreicht oder ob ich
benötige, um die Fehler schon vorab für die Offline-Reparatur einzustellen. Oder wäre das sogar doppelt, da ja auch /spotfix eine Aufgabe für die Offlinereparatur anlegt? Im Netz finde ich sehr widersprüchliche Informationen hierzu und selbst kann ich es derzeit nicht testen, da keine Fehler vorhanden sind und somit keine Einstellung für den Offline-Fix erfolgt.
II. Fixierung eines Volumes in der Registrierung, dessen Laufwerksbuchstabe via Batch zugeteilt wurde
Das Programm soll die Möglichkeit bieten, "versteckten" Volumes einen Laufwerksbuchstaben zuzuteilen, um diese auch optimieren zu können. Bei mir sind das die Recovery und die System Partition. Ja ich habe die Recovery wieder ausgelagert, da ich winre.wim mit eingebautem DaRT10 als RAM-Disk laufen lasse und so beim Booten via Startmenü aufrufen kann.
%_DriveLetter% ist der Laufwerkbuchstabe ohne ":".
Der erste Schritt hierfür ist:
Allerdings ist mir aufgefallen, dass wmic den Laufwerksbuchstaben nach erfolgter Diskpart-Zuweisung trotzdem nicht findet. Vermute es liegt an der fehlenden Fixierung des Laufwerksbuchstabens in der Registrierung unter \HKLM\SYSTEM\MountedDevices. Gibt es eine Möglichkeit, diese über cmd manuell nachzuholen, ohne Gefahr zu laufen, sich die Zuweisung zu zerschießen?
Beispielsweise indem ich die Fixierung einmal in der Datenträgerverwaltung manuell erledige, um dann die Fixierungsbinary ( bspw. \\DosDevices\\R als .reg zu exportieren, um diese dann in der Batch via wieder hinzufügen zu können?
Die .reg sähe so aus:
Könnte ich diese also gefahrlos einfach importieren und wie wieder entfernen?
Oder via reg
?
III. Chkdsk nach volume GUID:
Ich könnte chkdsk auch über die volume GUID anstatt Laufwerksbuchstaben laufen lassen.
Die Bereitstellungspunkte bekomme ich via: . Hierzu müsste ich nach "Label" suchen und mir die DeviceID ausgeben lassen.
Wie kann ich hierfür eine FOR /F Schlaufe nutzen, die nach der Variable %_LabelX% (die Laufwerksbezeichnung) sucht und mir die DeviceID (ohne letzten Backslash \!) in die neue Variable %_DeviceIDX% ausgibt? Das bekomme ich nicht hin
EDIT:
Ich möchte als Ergebnis der FOR /F Schleife
\\?\Volume{4e0a0d00-0000-0000-0002-000000000000} anstatt
\\?\Volume{4e0a0d00-0000-0000-0002-000000000000}\
Kann man so eine Zeichenfolge überhaupt als Variable speichern? Bekomme bei Echo %_DeviceIDX% nun immer "ECHO ist ausgeschaltet (OFF)." anstatt den Inhalt der Variable.
Vielen Dank für die Hilfe!
Die fertige Batch stelle ich gerne zur Verfügung, wenn fertig.
ich entwickle derzeit für meinen Privatgebrauch und Freunde eine Disk-Management-Batch (chkdsk, defrag, stordiag, sdelete) nach dem NTFS-Health-Modell mit optimierten Befehlszeilen.
Hierzu habe ich ein paar Verständnisfragen:
I. chkdsk (nur NTFS) Parameter /spotfix:
Mein Plan ist es "chkdsk %_DriveLetterX% /V /sdcleanup /spotfix" optimal nutzen zu können, wobei %_DriveLetterX% ein vom User im Vorfeld eingegebener Laufwerksbuchstabe ist (z.B. "C:"). "Geplante Optimierung" (in dfrgui.exe) ist ausgeschaltet. Spotfix greift auf vorherig protokollierte Scanergebnisse zurück und führt eine Reparatur anhand der protokollierten Fehler durch anstatt jede Datei einzeln zu prüfen und führt somit zur Reparatur in höchstmöglicher Geschwindigkeit. Nun wüsste ich gerne explizit, ob ein im Vorfeld ausgeführtes
chkdsk %_DriveLetterX% /scan /V /perf
chkdsk %_DriveLetterX% /scan **/forceofflinefix** /V /perf
benötige, um die Fehler schon vorab für die Offline-Reparatur einzustellen. Oder wäre das sogar doppelt, da ja auch /spotfix eine Aufgabe für die Offlinereparatur anlegt? Im Netz finde ich sehr widersprüchliche Informationen hierzu und selbst kann ich es derzeit nicht testen, da keine Fehler vorhanden sind und somit keine Einstellung für den Offline-Fix erfolgt.
II. Fixierung eines Volumes in der Registrierung, dessen Laufwerksbuchstabe via Batch zugeteilt wurde
Das Programm soll die Möglichkeit bieten, "versteckten" Volumes einen Laufwerksbuchstaben zuzuteilen, um diese auch optimieren zu können. Bei mir sind das die Recovery und die System Partition. Ja ich habe die Recovery wieder ausgelagert, da ich winre.wim mit eingebautem DaRT10 als RAM-Disk laufen lasse und so beim Booten via Startmenü aufrufen kann.
%_DriveLetter% ist der Laufwerkbuchstabe ohne ":".
Der erste Schritt hierfür ist:
(echo Rescan
echo List Disk
echo Select Disk 1
echo List Partition
echo Select Partition 1
echo Assign letter="%_DriveLetter%"
) | diskpart
Allerdings ist mir aufgefallen, dass wmic den Laufwerksbuchstaben nach erfolgter Diskpart-Zuweisung trotzdem nicht findet. Vermute es liegt an der fehlenden Fixierung des Laufwerksbuchstabens in der Registrierung unter \HKLM\SYSTEM\MountedDevices. Gibt es eine Möglichkeit, diese über cmd manuell nachzuholen, ohne Gefahr zu laufen, sich die Zuweisung zu zerschießen?
Beispielsweise indem ich die Fixierung einmal in der Datenträgerverwaltung manuell erledige, um dann die Fixierungsbinary ( bspw. \\DosDevices\\R als .reg zu exportieren, um diese dann in der Batch via
reg add /v /t /d /f
Die .reg sähe so aus:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices]
"\\DosDevices\\R:"=hex:44,4d,49,4f,3a,49,44,3a,b2,c8,a1,bd,0d,ef,c1,4a,92,d3,\
61,58,d2,c7,6c,64
Könnte ich diese also gefahrlos einfach importieren und wie wieder entfernen?
Oder via reg
reg add HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices /v "\\DosDevices\\R:" /t REG_BINARY /d "hex:44,4d,49,4f,3a,49,44,3a,b2,c8,a1,bd,0d,ef,c1,4a,92,d3,61,58,d2,c7,6c,64" /f
III. Chkdsk nach volume GUID:
Ich könnte chkdsk auch über die volume GUID anstatt Laufwerksbuchstaben laufen lassen.
Die Bereitstellungspunkte bekomme ich via:
powershell -command "GWMI -namespace root\cimv2 -class win32_volume | Select Label, DeviceID, FileSystem, DriveLetter"
Wie kann ich hierfür eine FOR /F Schlaufe nutzen, die nach der Variable %_LabelX% (die Laufwerksbezeichnung) sucht und mir die DeviceID (ohne letzten Backslash \!) in die neue Variable %_DeviceIDX% ausgibt? Das bekomme ich nicht hin
EDIT:
Ich möchte als Ergebnis der FOR /F Schleife
\\?\Volume{4e0a0d00-0000-0000-0002-000000000000} anstatt
\\?\Volume{4e0a0d00-0000-0000-0002-000000000000}\
Kann man so eine Zeichenfolge überhaupt als Variable speichern? Bekomme bei Echo %_DeviceIDX% nun immer "ECHO ist ausgeschaltet (OFF)." anstatt den Inhalt der Variable.
Vielen Dank für die Hilfe!
Die fertige Batch stelle ich gerne zur Verfügung, wenn fertig.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 658239
Url: https://administrator.de/contentid/658239
Ausgedruckt am: 29.03.2024 um 09:03 Uhr
1 Kommentar