2011-08-30 75 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 –

相关问题