Batch Datei, abfrage von Festplatten
Hallo,
ich möchte wissen ob folgendes realisierbar ist über eine Batch-Datei. In der Batchdatei soll eine Abfrage stattfinden ob Laufwerke c:/d:/e: vorhanden sind, wenn Ja, soll mein Befehl ausgeführt werden. Soweit so einfach. Mein befehl kann aber nur auf Festplatten ausgeführt werden, da die Befehle Daten schreiben bzw. löschen sollen. Auf d: wenn dies ein CD-ROm Laufwerk ist kann ja logischerweise nicht geschrieben werden.. Ist es möglich per batch Datei herauszufinden ob Laufwerk d: eine Festplatte ist, wenn ja, soll mein Befehl ausgeführt werden....?
Danke schonmal für eure Hilfe. Hoffe das meine Formulierungen doch für den ein oder anderen verständlich sind *g*
Gruss, André
ich möchte wissen ob folgendes realisierbar ist über eine Batch-Datei. In der Batchdatei soll eine Abfrage stattfinden ob Laufwerke c:/d:/e: vorhanden sind, wenn Ja, soll mein Befehl ausgeführt werden. Soweit so einfach. Mein befehl kann aber nur auf Festplatten ausgeführt werden, da die Befehle Daten schreiben bzw. löschen sollen. Auf d: wenn dies ein CD-ROm Laufwerk ist kann ja logischerweise nicht geschrieben werden.. Ist es möglich per batch Datei herauszufinden ob Laufwerk d: eine Festplatte ist, wenn ja, soll mein Befehl ausgeführt werden....?
Danke schonmal für eure Hilfe. Hoffe das meine Formulierungen doch für den ein oder anderen verständlich sind *g*
Gruss, André
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 63212
Url: https://administrator.de/forum/batch-datei-abfrage-von-festplatten-63212.html
Ausgedruckt am: 12.03.2025 um 07:03 Uhr
9 Kommentare
Neuester Kommentar
Moin Womanizer,
wenn wir bei dem Beispiel mit fsutil.exe bleiben, dann könnte die Strategie wie folgt aussehen:
Im Batch:
Aber Vorsicht: auch eventuelle SUBST-Drives werden von FsUtil als "Eingebaute Laufwerke" ausgegeben.
Irgendwo in diesem Forum gibt es ein oder zwei Beiträge, in denen mit einer gefühlten Handvoll VBScript-Zeilen über den DriveType die "echten" FixedDrives (Drivetype =2 ) ermittelt werden.
Die vermutlich umfassendste und informativste Diskussion dazu findest Du in onegassees Beitrag .
Grüße
Biber
wenn wir bei dem Beispiel mit fsutil.exe bleiben, dann könnte die Strategie wie folgt aussehen:
- alle lokalen Platten sind im (deutschen) Fsutil-Jargon erkennbar als "Eingebautes Laufwerk"
- diese Laufwerksbuchstaben in eine temporäre Text-Datei schreiben.
- diese Textdatei als Input für eine FOR /F... IN...DO..-Anweisung mit Deinen IF EXIST-Anweisungen nehmen.
- aufräumen.
Im Batch:
@echo off % Setlocal
Set fixLWs=%temp%\FixLWs.txt
call :clean
for /f %%a in ('fsutil fsinfo drives^|find ":"') do fsutil fsinfo drivetype %%a |find "Eingebaut">>%fixlws%
REM Alle "Eingebauten" Laufwerken stehen als Zeilen "C:\ - Eingebautes Laufwerk" in %fixLWs%
For /f %%i in (%fixLWs%) do (
REM ...whatever, z.B so was:
If Exist %%i\config\myfile.xyz echo KillRoy was here>>%%i\config\myfile.xyz
REM .... oder etwas sinnvolles...
)
:: bei Bedarf weiteres Gebätsche...
:clean
IF Exist %fixLws% del %fixLws%
goto :eof
Aber Vorsicht: auch eventuelle SUBST-Drives werden von FsUtil als "Eingebaute Laufwerke" ausgegeben.
Irgendwo in diesem Forum gibt es ein oder zwei Beiträge, in denen mit einer gefühlten Handvoll VBScript-Zeilen über den DriveType die "echten" FixedDrives (Drivetype =2 ) ermittelt werden.
Die vermutlich umfassendste und informativste Diskussion dazu findest Du in onegassees Beitrag .
Grüße
Biber
Moin Womenizer,
also angenommen, diese paar Folge-Zeilen von oben
erzeugen auch bei Dir eine Datei namens %temp%\FixLws.txt...
Dann steht darin z.B. folgendes :
Wenn das der Fall ist...
(bitte überprüfen - wenn wir nicht soweit das gleiche Ergebnis haben, dann sind die folgenden Zeilen vergebens)...
...dann kannst Du
- in demselben Batch (siehe oben)
- oder in einem zweiten, separaten Batch
die eigentliche Aufgabe erfüllen lassen:
Diesen FOR-Block kannst Du auch wieder an dieselbe Stelle setzen, an der im ersten Beispiel der FOR-Block steht.
Grüße
Biber
also angenommen, diese paar Folge-Zeilen von oben
@echo off % Setlocal
Set fixLWs=%temp%\FixLWs.txt
call :clean
for /f %%a in ('fsutil fsinfo drives^|find ":"') do fsutil fsinfo drivetype %%a |find "Eingebaut">>%fixlws%
REM Alle "Eingebauten" Laufwerken stehen als Zeilen "C:\ - Eingebautes Laufwerk" in %fixLWs%
:clean
IF Exist %fixLws% del %fixLws%
goto :eof
Dann steht darin z.B. folgendes :
::--------snipp %temp%\FixLws.txt
C:\ - Eingebautes Laufwerk
D:\ - Eingebautes Laufwerk
E:\ - Eingebautes Laufwerk
::---------snapp %temp%\FixLws.txt
(bitte überprüfen - wenn wir nicht soweit das gleiche Ergebnis haben, dann sind die folgenden Zeilen vergebens)...
...dann kannst Du
- in demselben Batch (siehe oben)
- oder in einem zweiten, separaten Batch
die eigentliche Aufgabe erfüllen lassen:
::### mit der folgenden FOR/F-Anweisung liest Du nacheinander
::### die Laufwerksbuchstaben C:\, D:\ und E:\ aus den drei Zeilen der Textdatei aus
::### ...und zwar in die Lauf-Variable %%i ....
For /f %%i in (%fixLWs%) do (
REM Hier kannst Du dann Deine Datei test.txt in alle Laufwerke c:\beispiel\ordner , D:\Beispiel\ordner usw. kopieren
If Not Exist %%i\c:\beispiel\ordner md %%i\beispiel\ordner
COPY /Y "C:\Eigene Dateien\MeineDatei.txt" %%i\beispiel\ordner\test.txt
REM .... oder etwas sinnvolles...
)
::.....
Diesen FOR-Block kannst Du auch wieder an dieselbe Stelle setzen, an der im ersten Beispiel der FOR-Block steht.
Grüße
Biber