womanizer
Goto Top

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é

Content-ID: 63212

Url: https://administrator.de/contentid/63212

Ausgedruckt am: 26.11.2024 um 01:11 Uhr

talkinghands
talkinghands 06.07.2007 um 14:23:35 Uhr
Goto Top
hallo erstmal,
echo ist da jemand >H:\binda.txt
if exist h:\binda.txt goto tuwas
goto ende

:tuwas
hier steht dann der oder die  befehl(e), welche ablaufen sollen...
if exist H:\binda.txt del H:\binda.txt
goto ende

:ende
Ciao
TH
Womanizer
Womanizer 06.07.2007 um 14:30:38 Uhr
Goto Top
Das problem ist ja das z.b. H:/ ein CD-Laufwerk sein könnte oder eine SD-Karte auf die nicht geschrieben werden soll. Die Batch-Datai soll quasi erkennen ob es eine Festplatte ist und kein CD-Rom Laufwerk.

Ist dies möglich?
talkinghands
talkinghands 06.07.2007 um 14:33:28 Uhr
Goto Top
if exist h:\binda.txt klappt dann eben nicht

da binda.txt ja nicht geschrieben werden konnte

ist also ein schreibgeschützes Laufwerk

also wird ans ende gesprungen und nichts gemacht
Womanizer
Womanizer 06.07.2007 um 14:54:46 Uhr
Goto Top
Bin grad bissl daneben, aber liegt glaub ich daran das ich schon seit 5 Uhr am arbeiten bin x_X

D.h., soweit ich das richtig verstanden habe, muss die datei binda.txt ja vorher auf den Laufwerken angelegt sein. DA diese batch datei später auf ca. 100 Clients laufen soll, ist das natürlich Käse die vorher manuell anzulegen.

Per Script anlegen bringt meiner Meinung nach auch nichts, da ja auf Multimedia Karten und USB Sticks geschrieben werden kann. Die befehle sollen aber nur auf lokalen Festplatten ausgeführt werden.

Gruss, André
talkinghands
talkinghands 06.07.2007 um 15:39:03 Uhr
Goto Top
vielleicht hilft dir das ja weiter
fsutil fsinfo drivetype C:
Gruss, TH
Womanizer
Womanizer 09.07.2007 um 14:48:19 Uhr
Goto Top
mmmh.... ok,

da zeigt der mir dann ja an, obs ein lokaler Datenträger ist oder CD....

jetzt kommt mein problem mit Schleifen und Abfragen... Kann mir da jmd verraten wie ich damit anfangen soll? Bin nicht wirklich so der crack mit Abfragen...

Danke schonmal im voraus.

Gruss,
André
Biber
Biber 09.07.2007 um 20:40:17 Uhr
Goto Top
Moin Womanizer,

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
Womanizer
Womanizer 10.07.2007 um 15:22:15 Uhr
Goto Top
Hallo Biber,

schonmal Dane für deine Hilfe. Allerdings habe ich noch die ein oder andere Frage....

Also, laut deinem Beispiel wird eine txt Datei in den temp Ordner geschrieben. Danach wird gecheckt ob die laufwerke quasi Eingebaute Laufwerke sind. Wenn ja schreibt er die Laufwerke in diese Textdatei. Soweit hab ich ja nun alles verstanden....

Wenn ich jetzt zum beispiel eine datei von meinem laufwerk auf die Laufwerke schreiben möchte die in dieser Txt Datei stehen, wie bekomme ich das denn in eine IF-Abfrage hin? Also wie lese ich aus, das z.b. Laufwerk C und D dort drin stehen, und meine Datei dann nur auf diese Laufwerke kopiert werden?

Hab da bis gerade herumgedoktort, aber bekomm das irgendwie nicht hin *newbie x_X*

gruss & Dank im voraus,

André
Biber
Biber 10.07.2007 um 20:19:44 Uhr
Goto Top
Moin Womenizer,

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
erzeugen auch bei Dir eine Datei namens %temp%\FixLws.txt...
Dann steht darin z.B. folgendes :
::--------snipp %temp%\FixLws.txt
C:\ - Eingebautes Laufwerk
D:\ - Eingebautes Laufwerk
E:\ - Eingebautes Laufwerk
::---------snapp %temp%\FixLws.txt
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:
::### 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