Board logo

標題: 取出,特定幾碼重複之檔名 [打印本頁]

作者: tomking    時間: 2011-10-7 08:28     標題: 取出,特定幾碼重複之檔名

請再幫忙..


EX: D:\aa\frty123.txt
       D:\aa\frty321.txt
       D:\aa\frer321.txt
       D:\aa\frhy345.txt
       D:\aa\frhy678.txt  

   取出,指定檔名:第1~4碼,, 重複... 秀在EXCEL 內.
或取出,指定檔名:第3~4碼,, 重複... 秀在EXCEL 內.
PS: 來源資料夾,可在EXCEL 內指定,,佳..  


THS..
作者: GBKEE    時間: 2011-10-7 14:38

回復 1# tomking
  1. Sub Ex()
  2.     A = "D:\aa\frty123.txt"
  3.     MsgBox Mid(A, 1, 5)
  4.     MsgBox Mid(A, 4, 2)
  5.     MsgBox Split(A, "\")(1)
  6. End Sub
複製代碼

作者: tomking    時間: 2011-10-10 00:34

DEAR 版主,,

再補充一下,
因,某一個資料夾內有幾萬比之檔案. 檔名前幾碼是流水號, 後幾碼是時間,,,
一般是流水號是不可重複,,, 故需找出有那些流水號之檔名,可能是重複的..
EX: 123_201101010105
       124_201101010205
        124_201102010101
          ..
        ...
因124 ,,,有重複, ,故 秀出 124_201101010205 .124_201102010101  於EXCEL 中.以利找出正確, 刪除錯誤的..
作者: Hsieh    時間: 2011-10-10 09:48

回復 3# tomking
同目錄中的檔名是不可能同名
實在看不懂你想要的目的是甚麼?
以下程式碼會將以"_"為連接符號的檔名(你所舉例的檔名)分成流水號與時間兩部分
然後將結果顯示到A:B兩欄
  1. Sub nn()
  2. Dim Ar()
  3. With Application.FileDialog(msoFileDialogFolderPicker)
  4. .Show
  5. If .ButtonName = "確定" Then
  6. fd = .SelectedItems(1) & "\"
  7. End If
  8. End With
  9. fs = Replace(Dir(fd & "*.txt"), ".txt", "") '副檔名為txt檔案
  10. Do Until fs = ""
  11. a = Split(fs, "_") '流水號與時間連接符號為"_"
  12. ReDim Preserve Ar(s)
  13. Ar(s) = a
  14. s = s + 1
  15. fs = Dir
  16. Loop
  17. If s > 0 Then [A1].Resize(s, 2) = Application.Transpose(Application.Transpose(Ar))
  18. End Sub
複製代碼

作者: tomking    時間: 2011-10-11 12:07

DEAR  大大

可否改成,只秀出,有重複之檔名.
因,這個資料夾之檔案數量 > 70000 筆,  ,要從中,找出,,,流水號有重複的,,真的不`容易..
再麻煩,,


感謝..
作者: tomking    時間: 2011-10-13 11:48

DAER 版主,,

補充一下,,,


取出,檔名中,: _ 之前有重複,秀在EXCEL 內.  
因數據夾內之檔案>70000筆, 故希望有程式,直接秀出,,在指定位置之檔案名有重複的,,
不然,取進EXCEL 欄位時,數據筆數會爆...
EX: D:\A\  內有很多文字檔,
D:\A\A123_20110101.txt
D:\A\ A123_20110102.txt
D:\A\A124_20110101.txt
D:\A\A125_20110105.txt
D:\A\A125_20110108.txt


再麻煩... .
作者: tomking    時間: 2011-12-27 16:00

DEAR  

終於想到一個好方式.. 但,,, 卡住了,,因它沒有依檔名名稱順序.取檔名... 請幫忙.... 不知少了那一個funtion

Sub same_name()
ThisWorkbook.Sheets("Sheet1").[D1] = "T"
Sheets("Sheet1").Select
Range("D2").Select
Selection.ClearContents

fd = [a1]

fs = Dir(fd & "*.txt")

Do Until fs = ""

Cells(2, 4) = Mid(fs, 1, 8)

If ThisWorkbook.Sheets("Sheet1").[D1] = ThisWorkbook.Sheets("Sheet1").[D2] Then
Cells(1 + r, 6) = fs
r = r + 1
'MsgBox "檔案重複,檔名:" & fs, vbOKOnly, "錯誤訊息"
'Exit Sub
End If

ThisWorkbook.Sheets("Sheet1").[D1] = ThisWorkbook.Sheets("Sheet1").[D2]
fs = Dir
Loop
End Sub
作者: GBKEE    時間: 2011-12-27 16:44

回復 7# tomking
請教你程式的用意  
ThisWorkbook.Sheets("Sheet1").[D1] = "T"         是何用意
Cells(2, 4) = Mid(fs, 1, 8)              ->[d2]    取fs 8位 是何用意      
If ThisWorkbook.Sheets("Sheet1").[d1] = ThisWorkbook.Sheets("Sheet1").[D2] Then  '未何要  [d1 ]= [d2]
作者: tomking    時間: 2011-12-27 17:14

回復 8# GBKEE

  DEAR 版主..


就如,先前問的,,如下,,,   
所有FILE NAME置於,D2.  假如  D1 & D2 一樣,就秀出 FILE NAME, 否則,取下一個FILE NAME


取出,檔名中,: _ 之前有重複,秀在EXCEL 內.  
因數據夾內之檔案>70000筆, 故希望有程式,直接秀出,,在指定位置之檔案名有重複的,,
不然,取進EXCEL 欄位時,數據筆數會爆...
EX: D:\A\  內有很多文字檔,
D:\A\A123_20110101.txt
D:\A\ A123_20110102.txt
D:\A\A124_20110101.tx
D:\A\A125_20110105.txt
D:\A\A125_20110108.txt

PS: 感謝




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