Tiedostojen listaus

Anonyymi-ap

Moi

Tartteisin apua kansioiden ja tiedostojen nimien kokoamiseksi yhteen taulukkoon,
johon luetaan kaikki asemat F-asemasta eteenpäin. Polku on sama kaikissa asemissa
asematunnusta lukuunottamatta (x:\xxxxx\yyyyy\zzzzz).

- asematunnus A5 lähtien
- kansioiden (B5), alikansioiden (C5) ja tiedostojen listaus D5 lähtien
- tulostus ilman välirivejä

17

470

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Tulostat dir komennolla tekstitiedostoon, jonka jälkeen avaat sen ekselissä. Sitten "text to columns" ja erottimeksi takakeno.

    • Anonyymi

      Sub ListFilesInFolder()
      Dim ws As Worksheet
      Dim folderPath As String
      Dim fileName As String
      Dim row As Long
      Dim col As Long

      Set ws = ThisWorkbook.Sheets("Sheet1") ' Muuta tarvittaessa oikea taulukkonimi
      row = 5 ' Aloitussolu

      Do While ws.Cells(row, 1).Value <> ""
      folderPath = ws.Cells(row, 1).Value
      If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"

      fileName = Dir(folderPath & "*.*")
      col = 2 ' Aloitussarake (B)

      Do While fileName <> ""
      ws.Cells(row, col).Value = fileName
      fileName = Dir
      col = col + 1
      Loop

      row = row + 1
      Loop
      End Sub

      • Anonyymi

        Moi.
        Siinähän taas meni jokunen päivä ja nyt sit takas koneelle. Mites toi koodi, kun ei levyasemilta ainakaan lue. Tarkotus oli lukee asemilta tietoi taulukkoon.


      • Anonyymi
        Anonyymi kirjoitti:

        Moi.
        Siinähän taas meni jokunen päivä ja nyt sit takas koneelle. Mites toi koodi, kun ei levyasemilta ainakaan lue. Tarkotus oli lukee asemilta tietoi taulukkoon.

        Asematunnus pitää vaihtaa A:han tai B:hen.


      • Anonyymi
        Anonyymi kirjoitti:

        Moi.
        Siinähän taas meni jokunen päivä ja nyt sit takas koneelle. Mites toi koodi, kun ei levyasemilta ainakaan lue. Tarkotus oli lukee asemilta tietoi taulukkoon.

        Hei
        Oletin että sinulla excelissä alkaen solusta A5 ja siitä alas on sen aseman osoite valmiina minkä tiedot haluat viereisiin sarakeisiin.
        Jos haluat lukea ulos kaikki tiedostot määritellyistä osoitteista tee seuraavasti.
        Avaa notepad ja kopio alla oleva rimpsu siihen.
        tee siihen seuraavat muutokset
        kohta D:\siivous. Tämän tilalle se paikka minne haluat txt logitiedoston luotavan.
        kohta D:\Data\desktop. Tähän sen aseman/kansion osoite jonka siällön haluat txt logiin.

        Tallenna notepad tiedosto haluamasi nimellä ja päätteeksi .vbs.
        Tallennuksen jälkeen etsi tallentamasi vbs ja tupla klikkaa, ajo alkaa ja hetken kuluttua sulla logi txt

        Set objFSO = CreateObject("Scripting.FileSystemObject")

        Set objLogFile = objFSO.CreateTextFile("D:\siivous.txt") '<---------------- creates an output file located here

        objLogFile.WriteLine "Type|ParentFolder|Name|DateCreated|DateLastModified|DateLastAccessed|Size"

        LoopSubFolders objFSO.GetFolder("D:\Data\Desktop\") '<----------------- path for analysis

        Sub LoopSubFolders(Folder)

        For Each SubFolder In Folder.SubFolders
        LoopSubFolders SubFolder
        For Each objFile In SubFolder.Files
        On Error Resume Next
        objLogFile.WriteLine objFile.Type & "|" & _
        objFile.ParentFolder & "|" & _
        objFile.Name & "|" & _
        objFile.DateCreated & "|" & _
        objFile.DateLastModified & "|" & _
        objFile.DateLastAccessed & "|" & _
        objFile.Size
        Next
        Next

        End Sub

        MsgBox ("Log File completed!")


      • Anonyymi
        Anonyymi kirjoitti:

        Hei
        Oletin että sinulla excelissä alkaen solusta A5 ja siitä alas on sen aseman osoite valmiina minkä tiedot haluat viereisiin sarakeisiin.
        Jos haluat lukea ulos kaikki tiedostot määritellyistä osoitteista tee seuraavasti.
        Avaa notepad ja kopio alla oleva rimpsu siihen.
        tee siihen seuraavat muutokset
        kohta D:\siivous. Tämän tilalle se paikka minne haluat txt logitiedoston luotavan.
        kohta D:\Data\desktop. Tähän sen aseman/kansion osoite jonka siällön haluat txt logiin.

        Tallenna notepad tiedosto haluamasi nimellä ja päätteeksi .vbs.
        Tallennuksen jälkeen etsi tallentamasi vbs ja tupla klikkaa, ajo alkaa ja hetken kuluttua sulla logi txt

        Set objFSO = CreateObject("Scripting.FileSystemObject")

        Set objLogFile = objFSO.CreateTextFile("D:\siivous.txt") '<---------------- creates an output file located here

        objLogFile.WriteLine "Type|ParentFolder|Name|DateCreated|DateLastModified|DateLastAccessed|Size"

        LoopSubFolders objFSO.GetFolder("D:\Data\Desktop\") '<----------------- path for analysis

        Sub LoopSubFolders(Folder)

        For Each SubFolder In Folder.SubFolders
        LoopSubFolders SubFolder
        For Each objFile In SubFolder.Files
        On Error Resume Next
        objLogFile.WriteLine objFile.Type & "|" & _
        objFile.ParentFolder & "|" & _
        objFile.Name & "|" & _
        objFile.DateCreated & "|" & _
        objFile.DateLastModified & "|" & _
        objFile.DateLastAccessed & "|" & _
        objFile.Size
        Next
        Next

        End Sub

        MsgBox ("Log File completed!")

        Moi
        Virhettä pukkaa...

        Komentosarja: C:\Testi\Lista.vbs
        Rivi: 2
        Merkki: 1
        Virhe: Ei käyttöoikeutta
        Koodi: 800A0046
        Lähde: Suorituksenaikainen Microsoft VBScript virhe


    • Anonyymi

      Vaihe 1: Luo VBA-makro

      Avaa Excel.
      Paina Alt + F11 avataksesi VBA-editorin.
      Valitse "Insert" > "Module" luodaksesi uuden moduulin.
      Liitä seuraava koodi moduuliin:


      Sub ListFilesAndFolders()
          Dim folderPath As String
          Dim folder As Object
          Dim subfolder As Object
          Dim file As Object
          Dim fso As Object
          Dim row As Long
          Dim driveLetter As String
          Dim i As Integer

          ' Aseta asematunnus
          For i = 5 To 26 ' Asematunnukset A5:Z5
              driveLetter = Chr(64 + i) & ":\"
              On Error Resume Next
              Set fso = CreateObject("Scripting.FileSystemObject")
              Set folder = fso.GetFolder(driveLetter & "xxxxx\yyyyy\zzzzz") ' Muokkaa polkua tarpeen mukaan
              
              If Not folder Is Nothing Then
                  row = Cells(Rows.Count, 2).End(xlUp).Row + 1 ' Aloita B-sarakkeesta
                  Call ListFolderContents(folder, row)
              End If
              On Error GoTo 0
          Next i
      End Sub

      Sub ListFolderContents(folder As Object, ByRef row As Long)
          Dim subfolder As Object
          Dim file As Object

          ' Listaa kansiot
          For Each subfolder In folder.SubFolders
              Cells(row, 2).Value = subfolder.Name ' Kansio
              Cells(row, 3).Value = "" ' Alikansio (tyhjää)
              Cells(row, 4).Value = "" ' Tiedosto (tyhjää)
              row = row + 1
              Call ListFolderContents(subfolder, row) ' Kutsutaan rekursiivisesti alikansioita
          Next subfolder

          ' Listaa tiedostot
          For Each file In folder.Files
              Cells(row, 2).Value = "" ' Kansio (tyhjää)
              Cells(row, 3).Value = "" ' Alikansio (tyhjää)
              Cells(row, 4).Value = file.Name ' Tiedosto
              row = row + 1
          Next file
      End Sub


      Vaihe 2: Suorita makro

      Palaa Exceliin ja tallenna tiedosto makroilla (xlsx-tiedosto ei tue makroja, joten tallenna se .xlsm-muodossa).
      Paina Alt + F8, valitse ListFilesAndFolders ja paina "Run".

      • Anonyymi

        Moi
        Pienellä testauksella muutama huomio. Toi asematunnus ei toimi mut silmukkanumeroo vaihtamalla, saa kyl oikeen aseman osuu kohalleen. Sit tiedostojen haussa vois olla tarkennin mukana, jonka mukaan sais rajata hakui.
        Annetun kansion tiedostot se hakee, mut vois olla hyvä, jos aseman ekasta kansiosta vikaan tekis haun samaan pötköön. Kiitti, jos jaksat naputella...


    • Anonyymi

      Jos polku on x:\xxxxx\yyyyy\zzzzz, asematunnus on selvä, mutta mitä tarkoitat kansioilla ja alikansioilla?

      • Anonyymi

        Moi
        Kun oon nyt rimpuillut ton kanssa niin "ajatus on selkee", kunhan vaan saisin selitetyksi. Ite en noita hakutoimintoja oikein osaa, mutta toivottavasti pikkuhiljaa se kirkastus. Paljon sain irti tosta sun aiemmasta jutusta, mutta näin olisi tarkoitus mennä. Vähän on ajatus alun jälkeen muuttunut.

        Asematunnus B5 soluun
        - aseman eka kansio C5 soluun, jos kansiossa on tiedostoja, niin C6 alaspäin
        - jos ekalla kansiolla on alikansio, niin D5 soluun kansion nimi
        - ja D6 solusta lähtien sen kansion tiedostot

        Näin rempataan kaikki alikansiot seuraaviin sarakkeisiin tiedostoineen, jonka jälkeen siirrytään aseman "toiseen" kansioon ja sen alikansioihin, ja tehdään sama remppa. Toinen kansio tulostetaan ekan kansion/alikansioiden tiedostojen alimman rivin, plus yhden välirivin jälkeen. Näin mennään aseman kaikki kansiot läpi.

        Eka asema tulostetaan Taul2 -välilehdelle (Taul1 jää koontitiedostolle), ja kun siirrytään seuraaviin asematunnuksiin, niin ne tulostettaisiin seuraaville välilehdille.


    • Anonyymi

      Alempana olevassa linkissä oli lähes sama kysymys. Siihen oli kaksi vaihtoehtoista ratkaisua. Muokkasin vain ensimmäisen vaihtoehdon pääohjelmaa, joka on tässä alla. Muu pysyy ennallaan.

      Alkuperäinen ei näytä asematunnusta, vaan sen paikalle tulee tyhjää. Oikaisin sen verran, että asematunnus kirjoitetaan pääohjelmassa, tulostus merkitään alkamaan toisesta sarakkeesta lähtien, ja lopuksi poistetaan tyhjä toinen sarake.

      Jos oli tarkoitus käydä hakemistot, jotka ovat tietyn polun päässä, lisää polku For-lauseen jälkeiselle riville: asema = Chr(a) & ":\polku". Tämä tulostuu silloin sarakkeeseen A.

      https://www.mrexcel.com/board/threads/vba-to-list-all-folders-subfolders-and-files-in-a-directory.1199314/


      Option Explicit

      Public Sub Main_List_Folders_and_Files()
      Dim alku, loppu, a, r
      Dim asema As String
      alku = Asc("C") ' Ensimmäinen levyasema
      loppu = Asc("D") ' Viimeinen levyasema
      With ActiveSheet
      .Cells.Clear
      r = 5
      For a = alku To loppu
      asema = Chr(a) & ":"
      .Cells(r, 1) = asema
      r = r + List_Folders_and_Files(asema, .Cells(r, 2))
      Next a
      .Cells(r, 1) = "Loppu"
      .Columns(2).Delete
      End With

      End Sub

      • Anonyymi

        Eihän toi voi toimia kun kutsut funktiota argumenteillä, joita ei ole funktiossasi .
        Tyhmää postata toimimattomia koodinpätkiä...


      • Anonyymi

        Moi
        Otin sen ekan listauksen ja vaihoin siihen ton sun tekemän alun.
        Jos ekaks asemaks laittaa C, niin kansioks nappaa Documents ja alkaa myllyttää sieltä tiedostoi ja sit kansioi ja niiden tiedostoi reippaat 270, kunnes tilttaa Permission denied virheilmotukseen.

        Jos taasen ekaks asemaks antaa G, aloittaa tiedostoilla Autorun.inf, BackuoPlusDeskIcon.ico, $RECYCLE.BIN sekä sen jälkeen vielä pieni kirjain/numero sarja väliviivoilla erotettuina. Sekin päättyy tohon samaan ilmotukseen.


      • Anonyymi
        Anonyymi kirjoitti:

        Moi
        Otin sen ekan listauksen ja vaihoin siihen ton sun tekemän alun.
        Jos ekaks asemaks laittaa C, niin kansioks nappaa Documents ja alkaa myllyttää sieltä tiedostoi ja sit kansioi ja niiden tiedostoi reippaat 270, kunnes tilttaa Permission denied virheilmotukseen.

        Jos taasen ekaks asemaks antaa G, aloittaa tiedostoilla Autorun.inf, BackuoPlusDeskIcon.ico, $RECYCLE.BIN sekä sen jälkeen vielä pieni kirjain/numero sarja väliviivoilla erotettuina. Sekin päättyy tohon samaan ilmotukseen.

        Minulla tuo toimi ainakin temp -hakemistoilla.
        Jos on hakemistoja, joille ei ole oikeuksia, tulee varmaankin virhe.
        Pääsetkö katsomaan kaikki hakemistot manuaalisesti?


      • Anonyymi
        UUSI
        Anonyymi kirjoitti:

        Minulla tuo toimi ainakin temp -hakemistoilla.
        Jos on hakemistoja, joille ei ole oikeuksia, tulee varmaankin virhe.
        Pääsetkö katsomaan kaikki hakemistot manuaalisesti?

        Moi
        Kaikki asemat toimii ok, ei mitään ongelmia. Mun noi ulkoiset data-asemat ei sisällä muuta kuin omia tekemiä kansioita ja niiden tiedostoja. Luuraahan siel toi recycle.bin kun se siihen törmää, oiskohan aseman mukana tulleen varmuuskopiointiohjelman juttui. Mut jos haetaan ekana kansio ja sitten siihen kuuluvat tiedostot, niin miten se tohon törmää.


      • Anonyymi
        UUSI
        Anonyymi kirjoitti:

        Moi
        Kaikki asemat toimii ok, ei mitään ongelmia. Mun noi ulkoiset data-asemat ei sisällä muuta kuin omia tekemiä kansioita ja niiden tiedostoja. Luuraahan siel toi recycle.bin kun se siihen törmää, oiskohan aseman mukana tulleen varmuuskopiointiohjelman juttui. Mut jos haetaan ekana kansio ja sitten siihen kuuluvat tiedostot, niin miten se tohon törmää.

        Kokeilin monia kansioita ja useimpien kanssa ei ollut ongelmia, mutta esim hakemistossa C:\ProgamData tuli Access denied -virhe useiden alihakemistojen kohdalla. Kokeile suraavaa yksinkertaista virheenkäsittelyä aliohjelmaan List_Folders_and_Files. Se kirjoittaa virheilmoitukset VBA:n immediate-ikkunaan ja jatkaa seuraavaan hakemistoon.

        Lisää rivin
                c = c + 1
        jälkeen rivi
                On Error GoTo virhe:

        Lisää ennen lopun riviä
                 Loop
        seuraavat rivit

        virhe: 
            If Err.Number > 0 Then
                Debug.Print Err.Number, Err.Description
                Err.Clear
                Resume ohi:
            End If
        ohi:


      • Anonyymi
        UUSI
        Anonyymi kirjoitti:

        Kokeilin monia kansioita ja useimpien kanssa ei ollut ongelmia, mutta esim hakemistossa C:\ProgamData tuli Access denied -virhe useiden alihakemistojen kohdalla. Kokeile suraavaa yksinkertaista virheenkäsittelyä aliohjelmaan List_Folders_and_Files. Se kirjoittaa virheilmoitukset VBA:n immediate-ikkunaan ja jatkaa seuraavaan hakemistoon.

        Lisää rivin
                c = c 1
        jälkeen rivi
                On Error GoTo virhe:

        Lisää ennen lopun riviä
                 Loop
        seuraavat rivit

        virhe: 
            If Err.Number > 0 Then
                Debug.Print Err.Number, Err.Description
                Err.Clear
                Resume ohi:
            End If
        ohi:

        Moi
        Johan tuli ruudulle elämää, tosta peukku ylös ja kiitti. Virheilmotuksii pukkas suhtkoht noin 50 kpl, kun kaksi asemaa tsekkasin ja kaikissa luki 70 Permission denied.

        Nyt kun kattoo tota listausta, niin olis muutama tarve lisäriveille. Mihin tulis rivi ja millanen, jolla vois suodattaa muutamien tarkentimen mukaan tulostettavat tiedostot. Sais tarvekohtasii viimeistelympii tsekkauksii.

        Entä miten ratkeis pien ongelma kansioiden kanssa. Kun niiden määrä ylittää kymmenen esim. Kansio 1, Kansio 10, Kansio 11, Kansio 2, Kansio 3, niin se pukkaa noi ykkösellä alkavat tohon keulaan, eikä 1,2,3 ...


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Mies, miksi et vaikuta halukkaalta?

      Ihmeellistä käytöstä mieheltä. Toki et ole mikään teinipoika enää.
      Ikävä
      103
      1697
    2. 210
      1537
    3. Ikävä on häntä

      Josta on tullut niin tärkeä ja rakas. Olisinko onnellinen hänen kanssaan. Ne rakastavat silmät jotka mua katsoo aina jos
      Ikävä
      59
      1020
    4. Minkä kultakimpaleen

      Menetän jos en saa häntä. Joku muu saisi nauttia siitä hellyydestä, huumorista ja intohimosta. Ehkä hän ymmärtää nyt mik
      Ikävä
      31
      1000
    5. Terveystalon lääkärit ylilaskuttaneet

      Tämän pörriäiset osaavat, laskuttamisen. Terveystalo myöntää asian. https://www.hs.fi/suomi/art-2000011134269.html "K
      Maailman menoa
      58
      855
    6. En kai koskaan saa sinua

      Koska et usko että riitäisit minulle. Olet aina pitänyt itseäsi liian risana ja heikkona. Katkot korkeutesi, ja poraat k
      Ikävä
      51
      794
    7. Helppo selvittää onko oma täällä

      Laittaa yhden selvän kysymyksen ja jos kukaan ei osaa vastata, niin oikea ei ole täällä. Saa käyttää vapaasti hyödykse
      Ikävä
      49
      785
    8. Tykkäsit nainen

      Aina eniten lähetyssaarnaajassa, muistan miten nautit!😎😚 meidän pitää päästä vielä kokemaan se.
      Ikävä
      36
      735
    9. Kerroppas nyt

      M mies, että kenestä sinä oikein tykkäät, niin saadaan tämä asia muillekin selväksi 😉
      Ikävä
      58
      735
    10. The Summit Suomi: Maxie avaa hyytävästä tilanteesta kuvauksissa: "Veri roiskui ja tajusi, että..."

      Oletko seurannut The Summit Suomea? Tykkäätkö vai et tai mitä mieltä ylipäätään olet sarjasta? Moni katsoja on kaikonnut
      Tv-sarjat
      5
      732
    Aihe