Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

USB-Laufwerk unter WIN VISTA finden mittels verschachtelter FOR-Schleife

Frage Entwicklung Batch & Shell

Mitglied: 99046

99046 (Level 1)

14.09.2011, aktualisiert 18.10.2012, 3301 Aufrufe, 25 Kommentare, 1 Danke

Hallo zusammen,
ich habe ein Backup-Script, das unter XP prima läuft.
Ich brauche es jetzt für Windows-VISTA, hier der Teil, der das USB-Laufwerk finden soll:

01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
Set SuchLW= & Set LW= & Set Chckloibl= & Set Liste= & set VLaibl=  
04.
Set Chckloibl=USB 
05.
 
06.
for /F "skip=1" %%a in ('fsutil fsinfo drives ^| find ":\"') do set "Liste=!Liste! %%a" 
07.
Set Liste=%liste:\=% 
08.
for %%a in (%liste%) do for /f "tokens=6" %%l in ('vol %%a') DO set "VLaibl=%%l" & if "!VLaibl:~0,3!"=="%Chckloibl%" set LW=%%a\ 2>nul 
09.
 
10.
Set LW=%LW:~0,-1% 
11.
echo. && @echo Backuplaufwerk %LW% && echo. && pause
Ich komme nicht weiter, erhalte keine Ausgabe -
hat jemand einen Tip ?

Vielen Dank !
Rob
Mitglied: Skyemugen
14.09.2011 um 14:00 Uhr
Aloha,

auch schon als Administrator ausgeführt?

greetz André
Bitte warten ..
Mitglied: 99045
14.09.2011 um 14:28 Uhr
Hi,

Befehle in deiner Zeile 03 trennen, jeweils eine Zeile für jeden SET-Befehl.

Zum Testen

@echo on

benutzen!

Gruß
Bitte warten ..
Mitglied: bastla
14.09.2011, aktualisiert 18.10.2012
Hallo Rob400!

Ob wohl der Ansatz unter Batchdatei UNTER VISTA - Abfrage einer bestimmten USB-Platte (Laufwerksbuchstabe kann varieren) helfen könnte?

Grüße
bastla
Bitte warten ..
Mitglied: 99046
15.09.2011 um 14:51 Uhr
Hallo,
danke für eure schnellen Antworten.
ja, ich habe als Administrator ausgeführt.

Dieser Code: (habe "chekk.dat" auf dem USB-Stick angelegt)
01.
@echo off & setlocal 
02.
set "GUDL=%temp%\GetUSBDriveLetter.vbs" 
03.
echo Set fso=CreateObject("Scripting.FileSystemObject"):For Each D In fso.Drives:If D.DriveType=2 Then If D.IsReady Then If fso.FileExists(D.DriveLetter^&":\chekk.dat") Then WScript.Echo D.DriveLetter:Exit For>"%GUDL%" 
04.
echo Next>>"%GUDL%" 
05.
set LW= 
06.
for /f %%i in ('cscript //nologo "%GUDL%"') do set LW=%%i: 
07.
del "%GUDL%" 
08.
if not defined LW cls & echo USB-Festplatte leider nicht erkannt! & echo. & pause & goto :eof 
09.
echo USB-Festplatte ist Laufwerk %LW%
bringt:
"USB-Festplatte leider nicht erkannt!"

Dieser Code:
01.
::	@echo off & setlocal 
02.
@echo off  
03.
cd c:\ 
04.
@echo on & setlocal 
05.
Set Chckloibl=USB 
06.
set LW= 
07.
set Liste= 
08.
FOR /F "tokens=* delims=:\" %%a in ('"fsutil fsinfo drives"') do set "Liste=%%a" 
09.
echo %Liste% 
10.
Set Liste=%liste:\=% 
11.
echo %Liste% 
12.
Set Liste=%liste:~11% 
13.
echo %Liste% 
14.
 
15.
REM	wie bastel ich das IF NOT rein ?	## 
16.
for %%a in ("%Liste:~,2%") do for /f "tokens=6" %%l in ('vol %%a') DO set "VLaibl=%%l" & if "!VLaibl:~0,3!"=="%Chckloibl%" set LW=%%a 
17.
REM	if not:   Set Liste=%liste:~3% 
18.
    / 2>nul 
19.
 
20.
echo %VLaibl% 
21.
echo %Liste% 
22.
echo %LW%
hat folgende Ausgabe:
01.
C:\>Set Chckloibl=USB 
02.
C:\>set LW= 
03.
C:\>set Liste= 
04.
C:\>FOR /F "tokens=* delims=:\" %a in ('"fsutil fsinfo drives"') do set "Liste=%a" 
05.
C:\>set "Liste=Laufwerke: C:\ E:\ F:\ G:\ H:\ " 
06.
C:\>echo Laufwerke: C:\ E:\ F:\ G:\ H:\ 
07.
Laufwerke: C:\ E:\ F:\ G:\ H:\ 
08.
C:\>Set Liste=Laufwerke: C: E: F: G: H: 
09.
C:\>echo Laufwerke: C: E: F: G: H: 
10.
Laufwerke: C: E: F: G: H: 
11.
 
12.
C:\>Set Liste=C: E: F: G: H: 
13.
C:\>echo C: E: F: G: H: 
14.
C: E: F: G: H: 
15.
C:\>REM wie bastel ich das IF NOT rein ?        ## 
16.
C:\>for %a in ("C:") do for /F "tokens=6" %l in ('vol %a') DO set "VLaibl=%l"   & if "!VLaibl:~0,3!" == "USB" set LW=%a /  2>nul 
17.
C:\>for /F "tokens=6" %l in ('vol "C:"') DO set "VLaibl=%l"   & if "!VLaibl:~0,3!" == "USB" set LW="C:" /  2>nul 
18.
C:\>set "VLaibl=SYSTEM"   & if "!VLaibl:~0,3!" == "USB" set LW="C:" /  2>nul 
19.
C:\>echo SYSTEM 
20.
SYSTEM 
21.
 
22.
C:\>echo C: E: F: G: H: 
23.
C: E: F: G: H: 
24.
 
25.
C:\>echo 
26.
ECHO ist eingeschaltet (ON).
Weiß jemand Rat für Zeile 15-18 ?
Danke !

Grüsse
Rob
Bitte warten ..
Mitglied: bastla
15.09.2011 um 15:16 Uhr
Hallo rob400!
"USB-Festplatte leider nicht erkannt!"
ist ja auch die richtige Reaktion darauf, dass Du einen Stick verwendest ...

... bzw konkret: Es kommt auf den "DriveType"-Wert an - für einen Stick wäre das 1, für die Platte 2. Wenn beide Medienarten möglich sein sollen, ändere die Zeile 3 auf
echo Set fso=CreateObject("Scripting.FileSystemObject"):For Each D In fso.Drives:If D.DriveType^<=2 Then If D.IsReady Then If fso.FileExists(D.DriveLetter^&":\chekk.dat") Then WScript.Echo D.DriveLetter:Exit For>"%GUDL%"
Grüße
bastla
Bitte warten ..
Mitglied: 99045
15.09.2011 um 15:20 Uhr
Hi,

wenn du sowieso auf dem entsprechenden Laufwerk eine Semaphor-Datei anlegst, kannst du dir den ganzen Schnickschnack sparen und zur Suche des gewünschten Laufwerks einen Einzeiler verwenden:
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%a:\chekk.dat @echo Laufwerk ist %%a && set "LW=%%a"
Gruß
Bitte warten ..
Mitglied: bastla
15.09.2011 um 15:25 Uhr
... solltest aber dann besser ev vorhandenen Kartenleserslots keine Laufwerksbuchstaben zugeordnet haben ...

Grüße
bastla
Bitte warten ..
Mitglied: 99045
15.09.2011 um 15:53 Uhr
ev vorhandenen Kartenleserslots keine Laufwerksbuchstaben

Hamwa nich, kriejen wa ooch nich.
Vermutlich (?) verhalten die sich aber auch nicht anders als ein CD/DVD-Laufwerk ohne eingelegtes Medium.

Man kann aber auch die Maximalliste auf die evtl. vorhanden möglichen Laufwerksbuchstaben verkürzen.

Gruß
Bitte warten ..
Mitglied: 99046
15.09.2011 um 16:15 Uhr
noch mal danke an euch !

@bastla, klappt jetzt. Klasse.
geht s auch ohne Semaphore-Datei ?
01.
@echo off & setlocal 
02.
set "GUDL=%temp%\GetUSBDriveLetter.vbs" 
03.
echo Set fso=CreateObject("Scripting.FileSystemObject"):For Each D In fso.Drives:If D.DriveType^<=2 Then If D.IsReady Then WScript.Echo D.DriveLetter:Exit For>"%GUDL%" 
04.
echo Next>>"%GUDL%" 
05.
set LW= 
06.
for /f %%i in ('cscript //nologo "%GUDL%"') do set LW=%%i: 
07.
del "%GUDL%" 
08.
if not defined LW cls & echo USB-Festplatte leider nicht erkannt! & echo. & pause & goto :eof 
09.
echo USB-Festplatte ist Laufwerk %LW%
bringt Fehler:
"USB-Festplatte ist Laufwerk C:"

(MIT Semaphore: "USB-Festplatte ist Laufwerk H:"
Bitte warten ..
Mitglied: 99045
15.09.2011 um 16:25 Uhr
Welches Laufwerk ist denn nun dein gewünschtes USB-Laufwerk und welchen Typ gibt dir
fsutil fsinfo drivetype LW:\
aus?
Bitte warten ..
Mitglied: 99046
15.09.2011 um 16:29 Uhr
H: ist korrekt.

01.
C:\>fsutil fsinfo drivetype h: 
02.
h: - Austauschbares Laufwerk 
03.
 
04.
C:\>vol h: 
05.
 Datenträger in Laufwerk H: ist USB_xxx 
06.
 Volumeseriennummer: xxxx-xxxx
Bitte warten ..
Mitglied: 99045
15.09.2011 um 16:35 Uhr
Dann kannst du
For %%a in (%LISTE%) do fsutil fsinfo drivetype %%a:\ | findstr "Austauschbar" && set LW=%%a
verwenden, In Liste definierst du vorher die bei dir max. vorhandenen Laufwerksbuchstaben (nur die, ohne : und \, aber mit Leerzeichen dazwischen).

Allerdings benötigt FSUTIL Administratorrechte bzw. eine entsprechend angepasste UAC unter Vista / Win7
Einfacher wäre es mit der Semaphor-Datei bzw. mit VBScript, die funktionieren ohne.
Bitte warten ..
Mitglied: 99046
15.09.2011 um 16:44 Uhr
@99045, Danke für die Info.

@bastla, hast Du noch n Tip, wie die Laufwerkerkennung mit Deinem obigen Script,
aber ohne Semaphore-Datei
(d.h. für beliebige(n) USB Stick / Platte) geht ?

Danke, Rob
Bitte warten ..
Mitglied: 99045
15.09.2011 um 16:51 Uhr
Ich heiße zwar nicht bastla, kann dir die Info aber auch vermitteln:

  • 0="Unknown"
  • 1="Removable"
  • 2="Fixed"
  • 3="Network"
  • 4= "CD-ROM"
  • 5="RAM Disk"

Du müsstest also <=2 in =1 ändern..
Bitte warten ..
Mitglied: 99046
15.09.2011 um 17:03 Uhr
@99045, Klasse.

Danke für die Unterstützung !

Gruss,
Rob
Bitte warten ..
Mitglied: bastla
15.09.2011 um 17:43 Uhr
@99045
Danke für's Dolmetschen von
... für einen Stick wäre das 1, für die Platte 2


Grüße
bastla
Bitte warten ..
Mitglied: 99045
15.09.2011 um 17:50 Uhr
@bastla
Bitte sehr, dafür nehme ich nichts. *gg

Das mit dem Stick=1 stimmt aber nicht immer. Wenn der Stick als MBR-Device formatiert ist, hat er die 2 und wird als ganz normale Festplatte erkannt.

Gruß
Kaputtnick
Bitte warten ..
Mitglied: bastla
15.09.2011 um 17:54 Uhr
@99045
hat er die 2 und wird als ganz normale Festplatte erkannt.
... was aber nicht zur "Nicht-Erkennung" durch die erste Version geführt hätte (abgesehen davon war das ja auch ein Grund dafür, die Variante "<=2" anzubieten) ...

Grüße
bastla
Bitte warten ..
Mitglied: 99045
15.09.2011 um 17:56 Uhr
Aber <=2 beinhaltet auch "Unknown" bzw. in fsutil "Stammverzeichnis nicht vorhanden" und führt dann evtl. auch zum Fehler (wenn's nicht ready sein sollte) .
Bitte warten ..
Mitglied: bastla
15.09.2011 um 18:02 Uhr
Ich hatte vorhin schon zur Einschränkung "... aber natürlich wäre noch der Fall "0" auszuschließen" angesetzt, wollte Dir aber die Freude nicht nehmen ...

Grüße
bastla
Bitte warten ..
Mitglied: 99045
15.09.2011 um 18:05 Uhr
Danke, nett von dir. Allerdings ging es dem TO ja um die Version ohne Semaphor und mit seiner Version von 16:14 landet er eben bei C:.

Auf der anderen Seite müsstest du mich doch soweit kennen, dass ich nur sehr selten fertige Lösungen, sondern nur Denkansätze liefere. Schließlich sollten unsere TOs auch mal selbst etwas gefordert werden, was ja meistens auch klappt.
Bitte warten ..
Mitglied: bastla
15.09.2011 um 18:13 Uhr
Allerdings ging es dem TO ja um die Version ohne Semaphor
aber auch um
für beliebige(n) USB Stick / Platte
- und das wird sich über "DriveType" nicht lösen lassen ...

Grüße
bastla
Bitte warten ..
Mitglied: 99045
15.09.2011 um 18:18 Uhr
und das wird sich über "DriveType" nicht lösen lassen
Das ist richtig, hat aber auch niemand behauptet. Deshalb ja entweder ein(en) Semaphor nutzen oder eben Volume-Seriennummer, Label oder sonstige spezifische Merkmale zusätzlich verwenden, dann ist man (fast) immer auf der sicheren Seite.
Bitte warten ..
Mitglied: bastla
15.09.2011 um 18:24 Uhr
So könnten wir dann verbleiben ...

... besonders, da ganz weit oben etwas in der Art erste 3 Stellen des Labels = "USB" zu entnehmen ist - dann sollte sogar etwas (Ungetestetes) wie in etwa
echo Set fso=CreateObject("Scripting.FileSystemObject"):For Each D In fso.Drives:If D.DriveType=1 Or D.DriveType=2 Then If D.IsReady Then If UCase(Left(D.VolumeName,3))="USB" Then WScript.Echo D.DriveLetter:Exit For>"%GUDL%"
zum Ziel führen.

Grüße
bastla

[Edit[ "VolumeName" richtig gestellt [/Edit]
Bitte warten ..
Mitglied: 99046
15.09.2011 um 21:23 Uhr
Hallo noch mal,

... es führt zum Ziel, prima Verbesserung ... exakt nach Wunsch !

Ein weiteres Mal großes DANKE an euch beide !

Gruss,
Rob
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst CMD: icacls in for-Schleife (2)

Frage von Lowrider614 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
gelöst For Schleife kaputt? (5)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...