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/contentid/63212
Ausgedruckt am: 26.11.2024 um 01:11 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 Installationspfad einer Anwendung suchen auf unbekanntem PC.
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 Installationspfad einer Anwendung suchen auf unbekanntem PC.
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