2011-08-30 202 views
0

我想從指定的目錄中獲得一個隨機目錄,例如桌面。如何從文件夾列表中選擇一個隨機文件夾?

即時通訊不知道如何做到這一點,這和我在與我的應用程序

比如我在桌面上5名不同的目錄,名稱

方向1 方向2 DIR3麻煩的唯一的事情等等......

我想獲得DIR3,那麼也許Dir1中,也許DIR3後再次,依此類推。我想從桌面上得到一個隨機目錄...不知道如何解釋它更好...

指定一個目錄 - 我指定的目錄可能在文本框中,例如。或文件夾瀏覽器對話框

還我只是想獲得目錄的路徑,我不想對它做任何事情。

如果有人可以提供一些信息,我會非常讚賞:d

感謝大家!

+1

你可以編輯你的問題更具體嗎? 「桌面上的隨機目錄」(或者其他指定的目錄)是什麼意思?什麼「獲取目錄」(在任何位置)意味着 - 讀,創建,寫...?目前還不清楚你想要做什麼,這很難給你一個答案。 –

+0

比如我有一個名爲 方向1 方向2 DIR3桌面等上5名不同的目錄... 我想再次獲得DIR3,那麼也許Dir1中,也許DIR3後,依此類推。我想從桌面...不要隨機目錄真正懂得什麼更好的解釋? _A指定的directory_ - 我在例如一個文本框,也許指定目錄。 還我只是想獲得目錄的路徑,我不想對它做任何事情。謝謝:) – Matt

+0

如何「如何從文件夾列表中選擇一個隨機文件夾?」或「隨機數組字符串中的一個字符串」(這將是文件夾的路徑)?他們在桌面上並不重要,重要的是你從你擁有的幾個列表中獲得一個隨機文件夾? –

回答

2

這有點像功課,我的氣味。但我有一些時間要殺人。下面的函數將路徑作爲字符串並將一個隨機子文件夾作爲字符串返回。

Public Function GetRandomSubFolder(path As String) As String 
    ''//Static create a Random object so that we do not create a new one each time 
    Static R As New Random() 

    ''//Sanity check 
    If Not System.IO.Directory.Exists(path) Then Throw New System.IO.DirectoryNotFoundException("path") 

    ''//Get the subfolders as an array 
    Dim SubFolders = System.IO.Directory.GetDirectories(path) 

    ''//Sanity check 
    If SubFolders.Count = 0 Then Throw New ApplicationException("Could not find any subfolders") 


    ''//Get a random number. The second parameter is exclusive so (0,4) will always return 3 as a maximum 
    Dim RandomIndex As Integer = R.Next(0, SubFolders.Count) 

    ''//Return the path at that index 
    Return SubFolders(RandomIndex) 
End Function 
+0

我喜歡這個答案,因爲你已經對'Random'的實例使用'Static'(爲什麼c#沒有這個功能我不知道),你已經做了一些相當不錯的錯誤處理。我會建議,雖然'SubFolders.Count = 0'測試可能應該返回'Nothing',而不是拋出一個異常,因爲它不是一個真正的例外情況。第一個例外是非常特殊的。不過,答案很好。 – Enigmativity

+0

非常感謝!奇蹟般有效。 = D – Matt

+0

@Enigmativity,我絕對同意第二個異常實際上應該返回真實世界中的Nothing。不幸的是,我發現當我在這裏發佈代碼時,我們最終會解決爲什麼「它不工作」的問題,並且在發佈了幾篇文章後,我們發現他們獲得了NRE,然後又發佈了幾個他們沒有對他們的輸入進行消毒。所以我放棄了,我的代碼在這裏拋出了異常的大聲和清晰的解釋是什麼問題。 –

1

太有趣了! :-D

只要改變ParentFolder到要掃描的文件夾。

RandomFolder.bat

@Echo Off 
Set ParentFolder=C:\Users\Me\Desktop 
Set List= 
For /F "tokens=* delims=" %%d In ('Dir /b /ad "%ParentFolder%"') Do Call :AddToList "%%d" 
Set FolderCount=0 
Call :CountFolders %List% 
Set /a FolderIndex=%Random% %% %FolderCount% 
Call :SelectRandomFolder %List% 
Echo %RandomFolder% 
Exit /B 

:AddToList 
Set List=%List% %1 
Exit /B 

:CountFolders 
Shift 
If "%~1"=="" Exit /B 
Set /a FolderCount=%FolderCount% + 1 
Goto :CountFolders 

:SelectRandomFolder 
Set RandomFolder=%~1 
If %FolderIndex%==0 Exit /B 
Set /a FolderIndex=%FolderIndex% - 1 
Shift 
Goto :SelectRandomFolder 
+1

多數民衆贊成在批次和我代碼批處理,所以我會記得,但這是VB:P – Matt

+0

大聲笑!我今天一直在回答太多的批次問題。 :-D –

相關問題