Get the first free drive letter

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
  • meoit
    Senior Member
    • Oct 2014
    • 117

    Get the first free drive letter

    I am trying with code:

    code:
    Var FirstFreeLetter
    ${For} $0 A Z
    IfFileExists $0\*.* 0 Done
    StrCpy $FirstFreeLetter $0
    ${ExitFor}
    Done:
    ${Next}

    but not success.

    Thanks.
  • JasonFriday13
    Major Dude
    • May 2005
    • 929

    #2
    Have you tried one wildcard instead of *.*?
    "Only a MouseHelmet will save you from a MouseTrap" -Jason Ross (Me)
    NSIS 3 POSIX Ninja
    Wiki Profile

    Comment

    • Anders
      Moderator
      • Jun 2002
      • 5630

      #3
      The drive root is a bit special, there is no ".." directory.

      "\*" detects directory and/or root.

      "\?" detects directory but not root?

      "\." detects something but I don't remember what exactly.
      IntOp $PostCount $PostCount + 1

      Comment

      • ahmett
        Junior Member
        • Jan 2008
        • 22

        #4
        var /global comspec
        ExpandEnvStrings $comspec "%COMSPEC%"
        nsexec::exectostack '"$comspec" /C wmic logicaldisk get size,freespace,caption'
        Pop $0
        Pop $0
        ${WordFind} "$0" "$\n" "*" $1
        ${For} $2 1 $1
        ${WordFind} "$0" "$\n" "+$2" $3
        ${WordFind} "$3" ":" "+1}" $4
        ${if} $3 != $4
        ${WordFind} "$3" " " "+1" $4
        ${WordFind} "$3" " " "+2" $5
        ${WordFind} "$3" " " "+3" $6
        Math::Script 'r7 = f((r6=r6/1048576)-(r5=r5/1048576))'
        Strcmp $7 0 +2
        detailprint "Drive $4 Total:$6MB Free:$5MB Used:$7MB"
        ${endif}
        ${Next}

        Comment

        • meoit
          Senior Member
          • Oct 2014
          • 117

          #5
          OK. Now it's working.

          code:

          StrCpy $0 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
          StrCpy $1 0
          start:
          StrCpy $2 $0 1 $1
          StrCmp $2 '' end
          IntOp $1 $1 + 1
          ;MessageBox MB_OK '$$0={$0}$\n$$1={$1}$\n$$2={$2}'
          ${If} ${FileExists} '$2:\*'
          Goto start
          ${Else}
          StrCpy $0 '$2:'
          Goto end
          ${EndIf}
          end:
          MessageBox MB_OK|MB_USERICON '$0'

          Comment

          Working...
          X