Board logo

標題: [發問] 如何建立指定資料夾和檔案拷貝改名 [打印本頁]

作者: luke    時間: 2012-4-22 17:42     標題: 如何建立指定資料夾和檔案拷貝改名

各位大大

sheet1表B欄資料為文字檔(*.csv 和cbk)的檔案主名字, C欄是欲拷貝和更名的名稱, E欄是欲建立的資料夾名字

如何將B欄資料所對應的P01資料夾同名文字檔(*.csv 和cbk)進行拷貝並改名成C欄所對應的名稱

再行至E欄名字去建立新的資料夾,
然後依照E欄所對應資料去見立子資料夾和移轉改名後的檔案

煩請先進 大大指導
[attach]10585[/attach]
作者: luke    時間: 2012-4-22 18:31     標題: 語法內容求解

本帖最後由 luke 於 2012-4-27 07:10 編輯

各位大大

小弟碰到了下列語法, 但不清楚描述內容

煩請先進  大大指導解答意思

       Ipass = Worksheets("PASS").Cells(1, 3).Value
       Open Nplc For Binary As #1
       Seek #1, startpos
       For j = 1 To 8
        Put #1, , PassWD(j - 1)
       Next
作者: GBKEE    時間: 2012-4-22 19:55

回復 1# luke
建議你 先看看  VBA中   Open 陳述式 的說明
作者: Hsieh    時間: 2012-4-22 22:27

回復 1# luke
  1. Sub nn()
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. fd = ThisWorkbook.Path & "\"
  4. For Each a In Range("E2:E5")
  5. fn = fd & a & "\"
  6. fs = fn & a.Offset(, -2) & "\"
  7.    If fso.FolderExists(fn) = False Then MkDir fn
  8.    If fso.FolderExists(fs) = False Then MkDir fs
  9.    fso.copyfile fd & "P01\" & a.Offset(, -3) & ".csv", fn & a.Offset(, -2) & ".csv", True
  10.    fso.copyfile fd & "P01\" & a.Offset(, -3) & ".cbk", fn & a.Offset(, -2) & ".cbk", True
  11. Next
  12. End Su
複製代碼

作者: luke    時間: 2012-4-22 22:56

回復 2# GBKEE


謝謝G大回覆

這個語法是將文字檔打開後
移動至文字檔最後一列
會顯示8個數字

利用指定的儲存格(內有8個數字)做替換
即sheet1表C欄的數字(見粉紅色說明)

煩請先進 大大指導
[attach]10588[/attach]
作者: luke    時間: 2012-4-22 23:20

回復 2# Hsieh


    謝謝H大

    假如P01資料夾所有的*.cbk檔做了一些改變, 這些文字檔於轉成*.cbk後
    還要打開該文字檔, 將該檔最後一列的8位數字改成C欄所示名稱.

    例如: AA-1.bak改名為00011112.cbk文字檔後,
              必須先打開00011112..cbk至最後一列
              將它們的數字如00000000改成00011112後
               再行儲存檔案.

     請問如何修改這些文字檔?

     煩請先進 大大指導
     [attach]10590[/attach]
作者: Hsieh    時間: 2012-4-22 23:25

回復 3# luke

要改那些字?
    [attach]10591[/attach]
作者: luke    時間: 2012-4-22 23:49

回復 4# Hsieh

AA-1.cbk, BB-1cbk, CC-1.cbk和DD-1.cbk等
文字檔的最後一列(約第943列)
顯示數字為00000000共8個數字(如圖片標示處)
要改成對應sheet1表C欄數字
AA-1cbk-->00011112.cbk
BB-1.cbk-->00333333.cbk
.....

煩請先進 大大指導
[attach]10594[/attach]
作者: Hsieh    時間: 2012-4-23 00:04

回復 5# luke
  1. Sub nn()
  2. Dim A As Range
  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. fd = ThisWorkbook.Path & "\"
  5. For Each A In Range("E2:E5")
  6. fn = fd & A & "\"
  7. fs = fn & A.Offset(, -2) & "\"
  8.    If fso.FolderExists(fn) = False Then MkDir fn
  9.    If fso.FolderExists(fs) = False Then MkDir fs
  10.    Open fd & "P01\" & A.Offset(, -3) & ".cbk" For Input As #1
  11.    Open fn & A.Offset(, -2) & ".csv" For Output As #2
  12.    Open fn & A.Offset(, -2) & ".cbk" For Output As #3
  13.    Do Until EOF(1)
  14.    Line Input #1, mystr
  15.    If EOF(1) = True Then '更改最後一行資料
  16.       mystr = A.Offset(, -2)
  17.    End If
  18.    Print #2, mystr
  19.    Print #3, mystr
  20.    Loop
  21.    Close #1
  22.    Close #2
  23.    Close #3
  24. Next
  25. End Sub
複製代碼

作者: luke    時間: 2012-4-23 16:51

回復 9# Hsieh

謝謝H大

原P01資料夾所有的*.cbk檔更換成想要的檔案(約51KB-58KB)大小,,進行修改最後一列8位數字成C欄並改名後, 檔案只剩1KB,與原檔案大小相差很多, 出了轉檔問題。

請問如何修改程式?

煩請先進 大大指導
[attach]10609[/attach]
作者: Hsieh    時間: 2012-4-23 19:56

回復 10# luke
cbk檔案是特殊的檔案格式,我以記事本開啟出現亂碼
如果其內容是與同名的csv檔案相同,就以讀取csv代替即可
作者: luke    時間: 2012-4-23 20:31

本帖最後由 luke 於 2012-4-27 07:10 編輯

回復 11# Hsieh


    回覆H大

    *.cbk是以ASCII儲存的文字檔, , 因此讀取時會變成亂碼,  
    此檔是由同名的*.csv檔, 經過重新編譯加密而成,
   
    4#提供的程式僅未替換*.cbk檔案最後一列的密碼即sheet1表所對應的C欄值,
    以下是VB語法想改成VBA
       installpass = Worksheets("Sheet1").Cells(i, 3).Value
       Open newcsv For Binary As #1
       flen = FileLen(newcsv)
       For j = 1 To 8
       Put #1, , PassWD(j - 1)
       Next
       Close #1

如何插入這個語法?

煩請先進 大大指導
作者: Hsieh    時間: 2012-4-23 21:39

回復 12# luke
  1. Sub nn()
  2. Dim A As Range
  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. fd = ThisWorkbook.Path & "\"
  5. For Each A In Range("E2:E5")
  6. fn = fd & A & "\"
  7. fs = fn & A.Offset(, -2) & "\"
  8.    If fso.FolderExists(fn) = False Then MkDir fn
  9.    If fso.FolderExists(fs) = False Then MkDir fs
  10.    fso.copyfile fd & "P01\" & A.Offset(, -3) & ".csv", fn & A.Offset(, -2) & ".csv", True
  11.    fso.copyfile fd & "P01\" & A.Offset(, -3) & ".cbk", fn & A.Offset(, -2) & ".cbk", True
  12.    Open fn & A.Offset(, -2) & ".csv" For Binary As #1
  13.    n = FileLen(fd & "P01\" & A.Offset(, -3) & ".csv")
  14.    Seek #1, n - 9
  15.      For i = 1 To 8
  16.      Put #1, , Asc(Mid(A.Offset(, -2), i, 1))
  17.      Next
  18.    Close #1

  19.    Open fn & A.Offset(, -2) & ".cbk" For Binary As #1
  20.    n = FileLen(fd & "P01\" & A.Offset(, -3) & ".cbk")
  21.    Seek #1, n - 9
  22.      For i = 1 To 8
  23.      Put #1, , Asc(Mid(A.Offset(, -2), i, 1))
  24.      Next
  25.    Close #1
  26. Next
  27. End Sub
複製代碼

作者: luke    時間: 2012-4-23 22:45

回復 13# Hsieh


    謝謝H大

     *.csv是原始資料不需作改名, 只需進行*.cbk最後一列數字替換改名.

    改名後檔案內容和大小OK, 但*.cbk檔每個數字後面多了乙個"空白"
    如第1張圖, 正確應為第2張圖應為位置計算錯誤.

    請問如何修改原程式?

     煩請先進 大大指導
    [attach]10617[/attach]
作者: Hsieh    時間: 2012-4-23 23:37

回復 14# luke
  1. Sub nn()
  2. Dim A As Range
  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. fd = ThisWorkbook.Path & "\"
  5. For Each A In Range("E2:E5")
  6. fn = fd & A & "\"
  7. fs = fn & A.Offset(, -2) & "\"
  8.    If fso.FolderExists(fn) = False Then MkDir fn
  9.    If fso.FolderExists(fs) = False Then MkDir fs
  10.    fso.copyfile fd & "P01\" & A.Offset(, -3) & ".csv", fn & A.Offset(, -2) & ".csv", True
  11.    fso.copyfile fd & "P01\" & A.Offset(, -3) & ".cbk", fn & A.Offset(, -2) & ".cbk", True
  12.    Open fn & A.Offset(, -2) & ".cbk" For Binary As #1
  13.    n = FileLen(fd & "P01\" & A.Offset(, -3) & ".cbk")
  14.      For i = 1 To 8
  15.      Seek #1, n - 10 + i
  16.      Put #1, , Asc(Mid(A.Offset(, -2), i, 1))
  17.      Next
  18.    Close #1
  19. Next
  20. End Sub
複製代碼

作者: luke    時間: 2012-4-25 21:39

本帖最後由 luke 於 2012-4-30 19:29 編輯

回復 15# Hsieh


當AA-1.cbk檔改名成00011112.cbk檔後(如"上次結果"資料夾),
於第8位數字後面多了兩個空白格(如ASCII碼小黑框),
研判是byte計算錯誤,

請問如何修改原始碼程式?
煩請先進 大大指導
[attach]10671[/attach]
作者: Hsieh    時間: 2012-4-25 22:22

回復 16# luke
  1. Sub nn()
  2. Dim A As Range, Ar(8) As Byte
  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. fd = ThisWorkbook.Path & "\"
  5. For Each A In Range("E2:E5")
  6. For i = 0 To 7
  7.   Ar(i) = Asc(Mid(A.Offset(, -2), i + 1, 1))
  8. Next
  9. fn = fd & A & "\"
  10. fs = fn & A.Offset(, -2) & "\"
  11.    If fso.FolderExists(fn) = False Then MkDir fn
  12.    If fso.FolderExists(fs) = False Then MkDir fs
  13.    fso.copyfile fd & "P01\" & A.Offset(, -3) & ".csv", fn & A.Offset(, -2) & ".csv", True
  14.    fso.copyfile fd & "P01\" & A.Offset(, -3) & ".cbk", fn & A.Offset(, -2) & ".cbk", True
  15.    Open fn & A.Offset(, -2) & ".cbk" For Binary As #1
  16.    n = FileLen(fd & "P01\" & A.Offset(, -3) & ".cbk")
  17.    Seek #1, n - 9
  18.        For j = 1 To 8
  19.          Put #1, , Ar(j - 1)
  20.        Next
  21.    Close #1
  22. Next
  23. End Sub
複製代碼

作者: luke    時間: 2012-4-26 14:57

本帖最後由 luke 於 2012-4-30 19:27 編輯

[attach]10686[/attach]回復 17# Hsieh

謝謝
作者: Hsieh    時間: 2012-4-26 19:50

回復 18# luke

道理一樣,只是你要想怎麼得到目錄的字串,自己先做做看,把遇到的問題再提出討論。
作者: luke    時間: 2012-4-26 22:09

本帖最後由 luke 於 2012-4-30 19:27 編輯

回復 19# Hsieh


    謝謝
作者: luke    時間: 2012-4-27 09:15

本帖最後由 luke 於 2012-4-30 19:26 編輯

回復 19# Hsieh


   謝謝




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)