<!--
  canonical-url: https://www.avonture.be/fr/blog/vbs-files-csv
  published:     2024-11-28
  This is a static plain-Markdown mirror generated at build time.
  Visit the canonical URL above for the fully rendered page, with images and interactive components.
-->

# VBS - Obtenir la liste des fichiers et générer un CSV

> Besoin d'une liste de fichiers au format CSV ? Utilisez ce VBScript pour scanner un dossier, sous-dossiers inclus, et sortir les détails des fichiers comme la taille, la date et le propriétaire pour une analyse facile.

---
![VBS - Obtenir la liste des fichiers et générer un CSV](/img/v2/vbs.webp)

**TL;DR**

Cet article partage un VBScript (`files2csv.vbs`) qui parcourt récursivement un dossier Windows et exporte les détails des fichiers — chemin, nom, dates de création/d'accès/de modification, taille, type et propriétaire — vers un fichier CSV, prêt à être analysé dans Excel ou avec Python/Pandas.

Il y a six ans, j'avais besoin d'un script DOS capable de récupérer la liste de tous les fichiers d'un dossier sur une machine Windows et de générer un fichier `.csv` avec cette liste.

Une fois le fichier `.csv` généré, je pouvais le traiter dans MS Excel, par exemple, et le trier/filtrer ou, pourquoi pas, dans Python avec [la librairie Pandas](/blog/python-pandas-merge).

Voici ce que produit ce script : un fichier CSV listant tous les fichiers d'un dossier, avec les dates, la taille, le type et le propriétaire.

```csv
"FilePathAndName";"ParentFolder";"Name";"DateCreated";"DateLastAccessed";"DateLastModified";"Size";"Type";"Suffix";"Owner";
"C:\temp\test\test.csv";"C:\temp\test";"test.csv";"21-01-24 09:07:44";"21-01-24 09:09:08";"21-01-24 09:09:08";"472";"CSV Microsoft Excel File";"csv";"Christophe";
"C:\temp\test\test.vbs";"C:\temp\test";"test.vbs";"21-01-24 08:43:49";"21-01-24 09:09:03";"21-01-24 09:09:03";"3246";"VBScript File";"vbs";"Christophe";
```

Voici le script qui le génère. Copiez/collez la source ci-dessous et enregistrez-la dans un fichier, disons `c:\files2csv.vbs`. Ouvrez une console DOS, lancez `cd c:\` puis `cscript files2csv.vbs`. Quand le travail est terminé, vous obtenez le listing dans `files2csv.csv`.

**files2csv.vbs**

```vbs
'------------------------------------------------------------
'
' Get the list of files of the current folder + sub-folders and
' generate a .csv file with file information like path, size,
' extensions, author, ... making then easy to work with that list
' in Excel
'
' Based on a script of
' @author Peter Pinchao Liu (https://github.com/lpcclown)
' then modified by Christophe Avonture
'
' @Link : https://github.com/lpcclown/fileScan
'
'------------------------------------------------------------

Option Explicit

Dim objFSO, objCSVFile

' ------------------------------------
' Loop all file under one folder
' ------------------------------------
Function FilesTree(sPath)

Dim objFolder, objSubFolders, objSubFolder, objFiles, objFile
Dim objShell
Dim strFileName

  Set objFolder = objFSO.GetFolder(sPath)
  Set objSubFolders = objFolder.SubFolders
  Set objFiles = objFolder.Files

  For Each objFile In objFiles
    objCSVFile.Write chr(34) & objFile.Path & chr(34) & ";"
    objCSVFile.Write chr(34) & objFile.ParentFolder & chr(34) & ";"
    objCSVFile.Write chr(34) & objFile.Name & chr(34) & ";"
    objCSVFile.Write chr(34) & objFile.DateCreated & chr(34) & ";"
    objCSVFile.Write chr(34) & objFile.DateLastAccessed & chr(34) & ";"
    objCSVFile.Write chr(34) & objFile.DateLastModified & chr(34) & ";"
    objCSVFile.Write chr(34) & objFile.Size & chr(34) & ";"
    objCSVFile.Write chr(34) & objFile.Type & chr(34) & ";"
    objCSVFile.Write chr(34) & objFSO.getextensionname(objFile.Path) & chr(34) & ";"

    ' Get file owner
    Set objShell = CreateObject ("Shell.Application")
    Set objFolder = objShell.Namespace (sPath)

    For Each strFileName in objFolder.Items
      if objFolder.GetDetailsOf (strFileName, 0) = objFile.Name Then
        objCSVFile.Write chr(34) & objFolder.GetDetailsOf (strFileName, 10) & chr(34) & ";"
      End If
    Next

    objCSVFile.Writeline

  Next

  For Each objSubFolder In objSubFolders
    FilesTree(objSubFolder.Path) ' Recursion
  Next

  Set objFiles = Nothing
  Set objSubFolders = Nothing
  Set objFolder = Nothing

End Function

Dim sResultFileName, sFolderName
Dim wshShell

Const ForWriting = 2

  ' Create new CSV file : same name of this script but with
  ' .csv extension
  sResultFileName = wScript.ScriptFullName
  sResultFileName = replace(sResultFileName, ".vbs", ".csv")

  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objCSVFile = objFSO.CreateTextFile(sResultFileName, ForWriting, True)

  ' Write comma delimited list of columns in new CSV file.
  objCSVFile.Write chr(34) & "FilePathAndName" & chr(34) & ";" & _
  chr(34) & "ParentFolder" & chr(34) & ";" & _
  chr(34) & "Name" & chr(34) & ";" & _
  chr(34) & "DateCreated" & chr(34) & ";" & _
  chr(34) & "DateLastAccessed" & chr(34) & ";" & _
  chr(34) & "DateLastModified" & chr(34) & ";" & _
  chr(34) & "Size" & chr(34) & ";" & _
  chr(34) & "Type" & chr(34) & ";" & _
  chr(34) & "Suffix" & chr(34) & ";" & _
  chr(34) & "Owner" & chr(34) & ";"

  objCSVFile.Writeline

  Set wshShell = CreateObject("WScript.Shell")
  sFolderName = wshShell.CurrentDirectory
  Set wshShell = Nothing

  wScript.echo "Scan the " & sFolderName & ", please wait..."
  wScript.echo ""

  FilesTree(sFolderName)

  wScript.echo "Done, file " & sResultFileName & " has been created"
```

> **Vous aviez besoin d'un séparateur tabulation ?:**
>
> Si oui, faites simplement un rechercher/remplacer pour changer `";"` en `vbTab` partout.
