|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Выбор рандомной папки в системе |
|
CMD/BAT - [решено] Выбор рандомной папки в системе
|
Пользователь Сообщения: 116 |
я хочу сделать выбор рандомной точки в файловой системе Windows с помощью CMD...
у меня была вот эта наготовка но она не работает... setlocal enableextensions enabledelayedexpansion set "folder = C:\" :dig set /a n=0 for /f "UseBackQ Delims=[" %%A IN (dir "%folder%" /D) do ( set /a n+=1 ) If "%n%"=="0" (goto start) RND 0 %n% num set /a c=0 for /f "UseBackQ Delims=[" %%A IN (dir "%folder%" /D) do ( strlen length %%A set /a c+=1 if !c!==%num% set "folder=%folder%!%%A:~0,length-1!" ) goto dig :start echo %folder% pause :RND set MIN=%1 set MAX=%2 SET /A %3=%MIN%+(%MAX%-%MIN%+1)*%random%/32768 :strlen <resultVar> <stringVar> ( setlocal EnableDelayedExpansion set "s=!%~2!#" set "len=0" for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do ( if "!s:~%%P,1!" NEQ "" ( set /a "len+=%%P" set "s=!s:~%%P!" ) ) ) ( endlocal set "%~1=%len%" exit /b ) |
|
Отправлено: 16:55, 05-11-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:04, 05-11-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 116
|
Профиль | Отправить PM | Цитировать Цитата Iska:
бантик рандомно выдал папку test и перешел в неё C:\test потом чекает если подпапок больше нет то выводит её в переменную...иначе снова выбирает рандомную папку но уже в папке test...к примеру он выбрал рандомную папку test12 и перешел неё C:\test\test12 и так далее... UPD: Примеры каталогов: C:\
-temp -users -test -program files -system C:\test
-test1 -test2 -test3 -test12 -test5 -test6 |
|
Последний раз редактировалось Darkar25, 05-11-2018 в 17:46. Отправлено: 17:31, 05-11-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Darkar25, ясно. А почему только на одном разделе, и почему именно c:?
На WSH (пакетные файлы на коротком промежутке времени исполнения не дают реально псевдослучайных значений): Скрытый текст
Option Explicit Dim strRootFolder Dim objFSO Randomize Timer strRootFolder = "c:\" Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strRootFolder) Then WScript.Echo ScanSubFolders(objFSO.GetFolder(strRootFolder)) Else WScript.Echo "Can't find root folder [" & strRootFolder & "]." WScript.Quit 1 End If Set objFSO = Nothing WScript.Quit 0 '============================================================================= '============================================================================= Function ScanSubFolders(objFolder) Dim objSubFolder Dim intSubFoldersCount Dim intRandom Dim intCount intSubFoldersCount = objFolder.SubFolders.Count If intSubFoldersCount > 0 Then intRandom = Int(intSubFoldersCount * Rnd() + 1) intCount = 0 For Each objSubFolder In objFolder.SubFolders intCount = intCount + 1 If intCount = intRandom Then Exit For End If Next ScanSubFolders = ScanSubFolders(objSubFolder) Else ScanSubFolders = objFolder.Path End If End Function '============================================================================= |
Отправлено: 18:49, 05-11-2018 | #4 |
Пользователь Сообщения: 116
|
Профиль | Отправить PM | Цитировать Цитата Iska:
UPD:а можно ещё как-то сделать проверку,не выдаёт ли скрипт "800A0046"(Разрешение отклонено) и не находится ли путь в корзине? |
||
Последний раз редактировалось Darkar25, 05-11-2018 в 19:06. Отправлено: 18:53, 05-11-2018 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:31, 05-11-2018 | #6 |
Пользователь Сообщения: 116
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:36, 05-11-2018 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Давайте мы сделаем чуть по другому — вообще не будем трогать каталоги, имеющие атрибуты Hidden и System:
Скрытый текст
Option Explicit Const Hidden = 2 Const System = 4 Dim strRootFolder Dim objFSO Randomize Timer strRootFolder = "c:\" Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strRootFolder) Then WScript.Echo ScanSubFolders(objFSO.GetFolder(strRootFolder)) Else WScript.Echo "Can't find root folder [" & strRootFolder & "]." WScript.Quit 1 End If Set objFSO = Nothing WScript.Quit 0 '============================================================================= '============================================================================= Function ScanSubFolders(objFolder) Dim objSubFolder Dim intCount With WScript.CreateObject("Scripting.Dictionary") intCount = 0 For Each objSubFolder In objFolder.SubFolders If Not objSubFolder.Attributes And (Hidden Or System) Then intCount = intCount + 1 .Add intCount, objSubFolder End If Next If .Count > 0 Then ScanSubFolders = ScanSubFolders(.Items()(Int(.Count * Rnd()))) Else ScanSubFolders = objFolder.Path End If .RemoveAll End With End Function '============================================================================= |
Отправлено: 23:12, 05-11-2018 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Очистка папки %temp% у всех пользователей в системе. | noxville | Скриптовые языки администрирования Windows | 16 | 18-08-2020 06:47 | |
CMD/BAT - [решено] Выбор "рандомной" метки | idlazarev_alex@vk | Скриптовые языки администрирования Windows | 3 | 19-04-2014 18:34 | |
Установка - После удаления папки Windows.old - глюки в системе! | Wusa | Microsoft Windows 8 и 8.1 | 7 | 19-11-2013 17:51 | |
.NET - Окно выбор папки | ferget | Программирование и базы данных | 3 | 20-07-2011 07:01 | |
Блог - Как задать значок для папки, чтобы он отображался в любой системе | Vadikan | Microsoft Windows 7 | 0 | 14-07-2011 09:30 |
|