Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[Func] Fonction Formate
Auteur Message
Répondre en citant
Message [Func] Fonction Formate 
salut Mr. Green
Cette fonction utilise la commande Format.com présent normalement sur tous les cd's windows.


Code:

#include <Constants.au3>


#cs Example
$iTest = _FormatDrive('G:', 'FAT', '/Q')
Do
   if _Format_GetState($iTest) <> '' then ConsoleWrite(_Format_GetState($iTest) & ' %' & @CRLF)
Until _Format_GetState($iTest) = 100 or @error
_Format_End($iTest)
MsgBox(0, "", 'Format Complete')
#ce


;~ '$f_Opt = /Q/A:size/C/X'
Func _FormatDrive($d_Label, $dFileSystem = 'NTFS', $f_Opt = '', $workdire = @SystemDir)
   if $d_Label = '' then Return SetError(1, 0, '')
   Local $cPid, $aLine, $aOpt, $sOpt = ''
   Local $Dlabel = DriveGetLabel($d_Label & '\')
   if @error or $Dlabel = '' then
      ConsoleWrite("Imposssible d'obtenire le nOm du volume"&@CRLF)
      $Dlabel = 'Volume'
   Endif

   if $f_Opt = '' then
      $cPid = Run(@ComSpec & ' /c ' & _
               'Format ' & _
               $d_Label & _
               ' /FS:' & $dFileSystem, _
               $workdire, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
            If @error Then Return SetError(@error)

   Elseif $f_Opt <> '' Then
      if stringinStr($f_Opt, 'Q') or stringinStr($f_Opt, 'A') or stringinStr($f_Opt, 'C') or stringinStr($f_Opt, 'X') THEN
         IF StringInStr($f_Opt, 'C') and $dFileSystem <> 'NTFS' then Return SetError(2, 0, '')
         $aOpt = stringsplit($f_Opt, '/', 1)
         For $i = 2 to $aOpt[0]
            Select
               Case $aOpt[$i] = 'Q'
                  if $sOpt = '' then
                     $sOpt &= '/' & $aOpt[$i]
                  Else
                     $sOpt &= ' /' & $aOpt[$i]
                  Endif

               Case StringLeft($aOpt[$i], 1) = 'A'
                  if StringTrimLeft(StringLeft($aOpt[$i], 2), 1) <> ':' then Return SetError(4, 0, '')
                  $allocZ = Number(StringTrimLeft($aOpt[$i], 2))
                  if not IsNumber($allocZ) then Return SetError(4, 0, '')
                  Select
                     Case $dFileSystem = 'NTFS'
                        if not StringInStr('512|1024|2048|4096|8192|16384|32768|64536', $allocZ) then Return SetError(4, 0, '')

                     Case $dFileSystem = 'FAT'
                        if not StringInStr('512|1024|2048|4096|8192|16384|32768|64536|131072|262144', $allocZ) then Return SetError(4, 0, '')

                     Case $dFileSystem = 'FAT32'
                        if not StringInStr('512|1024|2048|4096|8192|16384|32768|64536|131072|262144', $allocZ) then Return SetError(4, 0, '')

                     Case $dFileSystem = 'exFAT'
                        if not StringInStr('512|1024|2048|4096|8192|16384|' & _
                                       '32768|64536|131072|262144|524288|' & _
                                       '1048576|2097152|4194304|8388608|16777216|' & _
                                       '33554432', $allocZ) then Return SetError(4, 0, '')
                  EndSelect
                  if $sOpt = '' then
                     $sOpt &= '/' & $aOpt[$i]
                  Else
                     $sOpt &= ' /' & $aOpt[$i]
                  Endif

               Case $aOpt[$i] = 'C'
                  if $sOpt = '' then
                     $sOpt &= '/' & $aOpt[$i]
                  Else
                     $sOpt &= ' /' & $aOpt[$i]
                  Endif

               Case $aOpt[$i] = 'X'
                  if $sOpt = '' then
                     $sOpt &= '/' & $aOpt[$i]
                  Else
                     $sOpt &= ' /' & $aOpt[$i]
                  Endif
            EndSelect
         Next

      ConsoleWrite(' /c ' & _
                   'Format ' & _
                 $d_Label & _
                 ' /FS:' & $dFileSystem & _
                 ' /V:' & $Dlabel & ' ' & $sOpt)

            $cPid = Run(@ComSpec & ' /c ' & _
                     'Format ' & _
                     $d_Label & _
                     ' /FS:' & $dFileSystem & _
                     ' /V:' & $Dlabel & ' ' & $sOpt, _
                     $workdire, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
                  If @error Then Return SetError(@error)
      Else
         Return SetError(3, 0, '')
      Endif
   Endif

Return $cPid
EndFunc

Func _Format_GetState($cPid)
   if not ProcessExists($cPid) then Return SetError(1, 0, '')
   Local $aLine

   While 1
      $aLine = StdoutRead($cPid)
         If @error Then Return SetError(@error, 0, '')
      If StringInStr($aLine, 'percent') or StringInStr($aLine, 'pour') or StringInStr($aLine, 'effect') or StringInStr($aLine, '%') Then _
         Return Number(StringRegExpReplace($aLine, '[abcdefghijklmnopqrstuvwxyz._- ]', ''))
   WEnd
Endfunc

Func _Get_Label($d_Label)
   if not FileExists($d_Label) then Return SetError(1, 0, '')
Local $rLabel =   DriveGetLabel($d_Label)

Return $rLabel
EndFunc

Func _Format_End($cPid)
   Local $aLine

   While 1
      $aLine = StdoutRead($cPid)
         If @error Then Return SetError(@error, 0, '')
      If StringInStr($aLine, 'Format') Then ExitLoop
   WEnd
      ConsoleWrite($aLine & @CRLF)
   ProcessWaitClose($cPid)
   if @error then Return SetError(@error, @extended)
   Return 1
Endfunc

#cs
FORMAT volume [/FS:file-system] [/V:label] [/Q] [/A:size] [/C] [/X] [/P:passes]
[/S:state]
FORMAT volume [/V:label] [/Q] [/F:size] [/P:passes]
FORMAT volume [/V:label] [/Q] [/T:tracks /N:sectors] [/P:passes]
FORMAT volume [/V:label] [/Q] [/P:passes]
FORMAT volume [/Q]

  volume          Specifies the drive letter (followed by a colon),
                  mount point, or volume name.
  /FS:filesystem  Specifies the type of the file system (FAT, FAT32, exFAT, NTFS
,
                  or UDF).
  /V:label        Specifies the volume label.
  /Q              Performs a quick format. Note that this switch overrides /P.
  /C              NTFS only: Files created on the new volume will be compressed
                  by default.
  /X              Forces the volume to dismount first if necessary.  All opened
                  handles to the volume would no longer be valid.
  /R:revision     UDF only: Forces the format to a specific UDF version
                  (1.02, 1.50, 2.00, 2.01, 2.50).  The default
                  revision is 2.01.
  /D              UDF 2.50 only: Metadata will be duplicated.
  /A:size         Overrides the default allocation unit size. Default settings
                  are strongly recommended for general use.
                  NTFS supports 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K.
                  FAT supports 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K,
                  (128K, 256K for sector size > 512 bytes).
                  FAT32 supports 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K,
                  (128K, 256K for sector size > 512 bytes).
                  exFAT supports 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K,
                  128K, 256K, 512K, 1M, 2M, 4M, 8M, 16M, 32M.

                  Note that the FAT and FAT32 files systems impose the
                  following restrictions on the number of clusters on a volume:

                  FAT: Number of clusters <= 65526
                  FAT32: 65526 < Number of clusters < 4177918

                  Format will immediately stop processing if it decides that
                  the above requirements cannot be met using the specified
                  cluster size.

                  NTFS compression is not supported for allocation unit sizes
                  above 4096.

  /F:size         Specifies the size of the floppy disk to format (1.44)
  /T:tracks       Specifies the number of tracks per disk side.
  /N:sectors      Specifies the number of sectors per track.
  /P:passes       Zero every sector on the volume passes times. This switch is
                  not valid with /Q
  /S:state        Where "state" is either "enable" or "disable"
                  Short names are enabled by default
#CE


j'aimerais que si possible, quelqu'un teste cette commande sous windows Vf Sad . Pour un pourcentage il ne faut pas mettre de paramètre /Q Okay




______________________________________________________


Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Func] Fonction Formate 
impossible d'édite j'ai oublier de mettre [func]




______________________________________________________


Répondre en citant
Message [Func] Fonction Formate 
Intéressant. Merci pour cette contribution.

Ça change quoi par rapport à lancer la commande format de l'invité de commande avec la fonction Runwait ?

Pas de problème, j'ai rajouté la balise.

Par "Windows Vf" tu entends Windows Vista ?




______________________________________________________
Répondre en citant
Message [Func] Fonction Formate 
j'ai poster ce code, car je faisais un programme qui permet de formater un disque. Et après quelques recherches je n'ai pas trouvé de fonctions en autoit, car la fenêtre était gênante. Et bon, quitte à faire quelque chose autant le faire bien.
Effectivement le :

Code:
Runwait(@ComSpec & " /k " & "format d: /FS:NTFS /q",'',@SW_Hide)


était bien plus simple,
mais avec ma fonction, sans le /Q je peux récupérer le pourcentage d'avancement et le mettre dans une progresse bar . et qui plus-est le formatage avec /Q est assez rapide mais j'ai pas testé avec des fichiers sur ma clé Laughing

et pour Vf c'est version fr Okay car je n'utilise pas les mêmes indices pour trouver le pourcentage Mr. Green




______________________________________________________


Message [Func] Fonction Formate 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch