MikeYates said:
IF EXIST E: ECHO Drive E: exists
If E: is a hard-drive partition, the echo occurs.
If E: is a CD-rom with a disc inserted, the echo occurs,
but if there is no CD inserted, the script hangs and a separate window
says
"There is no disk in the drive. Please insert a disk into drive E:."
"Cancel" "Try Again" "Continue"
so "if exists" cannot be used to enumerate drives in an unattended
script.
What methods for doing so can you suggest?
It is not clear from your post what you actually expect your batch file to
do when it detects a drive. Anyway, here are a couple of options that you
can tweak to suit your exact requirements. The first is a VB Script file.
You must save it as c:\Mike.vbs (for example), remove the line numbers, then
invoke it like so:
cscript //nologo c:\Mike.vbs
The second is the same script but wrapped into a batch file. Again you must
remove the line numbers.
VB Script File:
01. aDType = split("Unknown Removable Fixed Network CDROM RAMDISK")
02. Set oFSO = CreateObject("Scripting.FileSystemObject")
03. LF = Chr(10)
04.
05. sLine = "Drive Type State Label F/S Size
Free Serial"
06. WScript.Echo sLine
07. WScript.Echo String(Len(sLine)+2, "-")
08. For Each oDrive In oFSO.Drives
09. D = oDrive.DriveType
10. if D > UBound(aDType) then D = 0
11. sLine = oDrive.Path & " " & aDType(D)
12.
13. If oDrive.IsReady Then
14. sLine = Append(sLine, "ready", 18, False)
15. If oDrive.DriveType = 3 Then
16. sLine = Append(sLine, Left(oDrive.ShareName, 13), 29, False)
17. Else
18. sLine = Append(sLine, Left(oDrive.VolumeName, 13), 29, False)
19. End If
20.
21. sLine = Append(sLine, oDrive.FileSystem, 44, False)
22. sLine = Append(sLine, Int(oDrive.TotalSize/1000000), 51, True)
23. sLine = Append(sLine, Int(oDrive.FreeSpace/1000000), 59, True)
24. ' sLine = sLine & "Available=" & Int(oDrive.AvailableSpace/1000000)
25. sLine = Append(sLine, Hex(oDrive.SerialNumber), 67, False)
26. Else
27. sLine = Append(sLine, "not ready", 18, False)
28. End If
29. WScript.Echo sLine
30. Next
31.
32. Function Append(L, S, n, numerical)
33. if n < Len(L) + 2 then n = 2 Else n = n - Len(L)
34. If numerical Then
35. Append = L & Left(Space(60), n + 6 - Len(S)) & S
36. Else
37. Append = L & Left(Space(60), n) & S
38. End If
39. End Function
Batch file:
01. @echo off
02. set V=c:\TempVBS.vbs 2>c:\TempVBS.vbs
03. echo >> %V% aDType = split("Unknown Removable Fixed Network CDROM
RAMDISK")
04. echo >> %V% Set oFSO = CreateObject("Scripting.FileSystemObject")
05. echo >> %V% LF = Chr(10)
06. echo >> %V% sLine = "Drive Type State Label F/S
Size Free Serial"
07. echo >> %V% WScript.Echo sLine
08. echo >> %V% WScript.Echo String(Len(sLine)+2, "-")
09. echo >> %V% For Each oDrive In oFSO.Drives
10. echo >> %V% D = oDrive.DriveType
11. echo >> %V% if D ^> UBound(aDType) then D = 0
12. echo >> %V% sLine = oDrive.Path ^& " " ^& aDType(D)
13. echo >> %V% If oDrive.IsReady Then
14. echo >> %V% sLine = Append(sLine, "ready", 18, False)
15. echo >> %V% If oDrive.DriveType = 3 Then
16. echo >> %V% sLine = Append(sLine, Left(oDrive.ShareName, 13), 29,
False)
17. echo >> %V% Else
18. echo >> %V% sLine = Append(sLine, Left(oDrive.VolumeName, 13), 29,
False)
19. echo >> %V% End If
20. echo >> %V% sLine = Append(sLine, oDrive.FileSystem, 44, False)
21. echo >> %V% sLine = Append(sLine, Int(oDrive.TotalSize/1000000), 51,
True)
22. echo >> %V% sLine = Append(sLine, Int(oDrive.FreeSpace/1000000), 59,
True)
23. echo >> %V% ' sLine = sLine ^& "Available=" ^&
Int(oDrive.AvailableSpace/1000000)
24. echo >> %V% sLine = Append(sLine, Hex(oDrive.SerialNumber), 67, False)
25. echo >> %V% Else
26. echo >> %V% sLine = Append(sLine, "not ready", 18, False)
27. echo >> %V% End If
28. echo >> %V% WScript.Echo sLine
29. echo >> %V% Next
30. echo >> %V% Function Append(L, S, n, numerical)
31. echo >> %V% if n ^< Len(L) + 2 then n = 2 Else n = n - Len(L)
32. echo >> %V% If numerical Then
33. echo >> %V% Append = L ^& Left(Space(60), n + 6 - Len(S)) ^& S
34. echo >> %V% Else
35. echo >> %V% Append = L ^& Left(Space(60), n) ^& S
36. echo >> %V% End If
37. echo >> %V% End Function
38. cscript //nologo %V%
39. del %V%