Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: intro on May 16, 2020, 12:45:05 PM

Title: Вывод списка подкаталогов в файл
Post by: intro on May 16, 2020, 12:45:05 PM
Всем доброго времени суток!
Вопрос собственно в названии темы. Столкнулся с такой проблемой, а опыта и знаний не хватает. Нужно вывести в файл имена всех подкаталогов из определенной папки. Команда GETDIRLIST находит папки только на первом уровне. А мне нужен полный список всех вложенных папок, на всю глубину, с путями. Долго бился с циклами и условиями, пока совсем не запутался.  :-[
Я только начал осваивать Clickermann. Всякие мелочи уже могу делать сам, но со сложными алгоритмами пока не дружу. Уверен, что для знатоков такой скрипт строк в 10 написать не проблема, а я всю голову сломал. Если кто поможет решить задачку, буду очень благодарен.
Заранее спасибо.
Title: Re: Вывод списка подкаталогов в файл
Post by: intro on May 17, 2020, 07:01:14 PM
Пока ждал помощи здесь, разместил вопрос ешё на паре форумов. Нашелся один умелец. За готовый скрипт он запросил 500 рублей. Говорит, что "алгоритм сложный для понимания и вообще, такое мало кто сможет зделать" и что "это еще не дорого". А сам он якобы уложится в 10 строк кода, включая сортировку и HALT. Верится с трудом. Наверно ищет дурака, чтобы кинуть на бабки. В общем - тут тишина, а там просят денег. ;D
Или на самом деле всё так сложно и дорого? Мне первому чтоли взбрело в голову просканировать вложенные папки? ;D
Title: Re: Вывод списка подкаталогов в файл
Post by: ya12 on May 17, 2020, 10:23:37 PM
Раньше никому не требовалось. Как сделать чисто на кликермане не знаю.
Вот эта команда в .bat файле выводит содержимое подкаталогов в файл a.txt
dir /a:d /s >> a.txt
Title: Re: Вывод списка подкаталогов в файл
Post by: intro on May 18, 2020, 09:46:39 AM
Вот эта команда в .bat файле выводит содержимое подкаталогов в файл a.txt
dir /a:d /s >> a.txt

Спасибо, :) как вариант тоже пригодится.
Title: Re: Вывод списка подкаталогов в файл
Post by: Vint on May 18, 2020, 10:32:39 AM
Code: (clickermann) [Select]
EXECUTE("cmd.exe", "/C chcp 1251>nul && dir /ad /s /b /on >file.txt")кодировка файла cp866


Если нужно читать файл кликером можно сделать кодировку 1251
Code: (clickermann) [Select]
TFWRITE("cmd.bat", "chcp 1251>nul")
TFWRITE("cmd.bat", "dir /ad /s /b /on >dir.txt")
TFWRITE("cmd.bat", "chcp 1251>nul")
TFWRITE("cmd.bat", "dir /ad /s /b /on >dir.txt")
TFWRITE("cmd.bat", "del /F /S cmd.bat")
EXECUTE("cmd.bat", "/U")

WAITMS(300)
FOR($i=1, $i < TFCOUNT("dir.txt")+1)
   $addr = TFREAD("dir.txt", $i)
   LOGWRITE($addr)
   WAITMS(20)
END_CYC
Именно так, 2 раза. Не знаю в чём прикол, но на моей системе при одном повторении кодировка не переключается.
Title: Re: Вывод списка подкаталогов в файл
Post by: 4.У.В.@.К on May 18, 2020, 10:59:04 AM
...
Нашелся один умелец. За готовый скрипт он запросил 500 рублей. Говорит, что "алгоритм сложный для понимания и вообще, такое мало кто сможет зделать"
...

С каких это пор стал сложным для понимания "тупой" перебор ячеек массива в цикле? ;D Там же нет ничего больше в этом скрипте. Даже условий никаких нет. Все хоть раз такое уже делали. Другое дело, что не всем оно надо, это правда.
Мне вот надо, для раскидывания по папкам сайта файла index.html. Это древняя рекомендация по устранению уязвимости сайтов, для запрета доступа к каталогам. И делал я скрипт для этого. Привожу его просто как пример. Скрипт для Clickermann v4.14, но GETDIRLIST доступен уже в v4.13. Делал для себя, без оптимизаций - работает и ладно. Если из моего скрипта выкинуть всё лишнее, то как раз и останется десяток строк.
Если пример не поможет, могу допилить под данную задачу. Только позже, сейчас нет времени.

Code: (clickermann) [Select]
#name "index.html"

LOGCLEAR

$root = "C:\Сайт" // без закрывающего слэша

$copying = RADIOBOX("Выберете пункт", "Проверить", "Копировать") // копирование: запрешено - 1, разрешено - 2

$file = "index.html"

//-------------------------------

$exceptions = "Версии:Резерв:Новая папка" // Исключения

STRSEPARATE($exceptions, ":", $exceptlist)

//-------------------------------

TFCLEAR("Замены.txt", 0)

$path = STRCONCAT($root, "*")

ARRPUSH($dirs, $root) // включая корневую директорию

//LOGWRITE ($path)

//-------------------------------

SUB(Исключения)
   UNDEFINE($contains)
   FOR($i = 0, $i < ARRSIZE($exceptlist))
      IF(STRPOS($path, $exceptlist[$i]) != 0)
         INC($contains)
         $i = ARRSIZE($exceptlist)
      END_IF
   END_CYC
   IF($contains = 0)
      ARRPUSH($dirs, $path)
   END_IF
END_SUB

//-------------------------------

FOR($n = 0, $n < ARRSIZE($dirs))
   
   $path = STRCONCAT($dirs[$n], "\*")
   
   //   LOGWRITE ($path) // весь список в лог
   
   GETDIRLIST($tmp, $path)
   
   WHILE(ARRSIZE($tmp))
      $dir = ARRPOP($tmp)
      $path = STRCONCAT($dirs[$n], "\", $dir)
      Исключения() // фильтр исключений
      //      ARRPUSH($dirs, $path)
   END_CYC
   
END_CYC

//TFWRITEARR("out.txt", $dirs) // весь список директорий в файл

//-------------------------------

WHILE(ARRSIZE($dirs))
   
   $dir = ARRPOP($dirs)
   $path = STRCONCAT($dir, "\", $file)
   
   //   LOGWRITE ($path)
   
   //-------------------------------
   
   IF(FEXISTS($path))
      //      FDELETE($path)
   ELSE
     
      INC($copy)
     
      TFWRITE(STRCONCAT("Замены - ", $_date_str, " ", $_time_h, "-", $_time_m, "-", $_time_s, ".log"), $path)
     
      IF($copying = 2)
         FCOPY($file, $path)
      END_IF
     
   END_IF
   
END_CYC

LOGWRITE ("Скопировано файлов - ", $copy)

HALT
Title: Re: Вывод списка подкаталогов в файл
Post by: 4.У.В.@.К on May 18, 2020, 05:10:12 PM
Вот тебе и 10 строк. По другому вроде и не напишешь.
И всего то - за 490 ₽ (ПандеМайская скидка - 10 ₽). ;D

Для Clickermann v4.13
Code: (clickermann) [Select]
ARRPUSH($dirs, "C:\Program Files")
FOR($a = 0, $a < ARRSIZE($dirs))
   GETDIRLIST($tmp, STRCONCAT($dirs[$a], "\*"))
   FOR($b = 0, $b < ARRSIZE($tmp))
      ARRPUSH($dirs, STRCONCAT($dirs[$a], "\", $tmp[$b]))
   END_CYC
END_CYC
ARRSORT($dirs)
TFWRITEARR("dirs.txt", $dirs)
HALT
Title: Re: Вывод списка подкаталогов в файл
Post by: intro on May 19, 2020, 10:55:30 AM
Огромное спасибо всем за помощь и исчерпывающие ответы. Хорошая получилась тема.
Все варианты отлично работают и будут полезны не только мне, но и другим новичкам.
Спасибо! :)
Title: Re: Вывод списка подкаталогов в файл
Post by: 4.У.В.@.К on May 19, 2020, 05:58:01 PM
Огромное спасибо всем за помощь и исчерпывающие ответы. Хорошая получилась тема.
Все варианты отлично работают и будут полезны не только мне, но и другим новичкам.
Спасибо! :)

Да незачто. Обращайся. :D
Title: Re: Вывод списка подкаталогов в файл
Post by: Axelenz on May 30, 2020, 01:29:16 PM
Code: (clickermann) [Select]
//Подпрограмма вставить данные из буфера в PS (нажать/отпустить правую клавишу мышки)
SUB(down_up)
   POSTMESSAGE(WNDFIND("Windows PowerShell"), 0x0204, 0, 0)
   WAITMS(100)
   POSTMESSAGE(WNDFIND("Windows PowerShell"), 0x0205, 0, 0)
   WAITMS(100)
   POSTMESSAGE(WNDFIND("Windows PowerShell"), 0x0100, 0x0D, 0)
   WAITMS(500)
END_SUB

//Укажите интересующий каталог и путь к файлу вывода информации
$dir = "C:\Program Files"
$file = "D:\directory.txt"

//Открыть PowerShell
EXECUTE("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe")
WAIT(2)

//Вывести имена всех директорий в файл (включая скрытые и системные)
TOCLIP(STRCONCAT("Get-Childitem -Path '", $dir,"' -Recurse -Name -Attributes D,H,S | Out-File ", $file))
down_up()

//Вывести имена всех скрытых файлов в файл
//TOCLIP("Get-Childitem -Path 'C:\Program Files' -Recurse -Name -File -Attributes Hidden | Out-File D:\files.txt")
//down_up()

//Закрыть PowerShell
TOCLIP("exit")
WAITMS(100)
down_up()

Вот простая конструкция без использования циклов и условий. Можно добавлять любые команды PowerShell, как показано на примере получения списка скрытых файлов. Может она и не на 10 строк, но для любителей минимализма можно и сократить, убрав пустые строки, комментарии и т.д.
Title: Re: Вывод списка подкаталогов в файл
Post by: intro on June 07, 2020, 10:35:36 PM
Axelenz спасибо за помощь и интересный вариант.
Я просто думал что обсуждение темы закончилось. Вот и не заходил.
К сожалению у меня это не работает. Скрипт бесконечно плодит окна PowerShell и всё. Никакие команды он в эти окна не пишет. Может прав не хватает или еще что. Сам с этим не разобрался. :-[
Title: Re: Вывод списка подкаталогов в файл
Post by: Axelenz on June 08, 2020, 09:25:59 PM
У меня работает на Windows 8.1 64 bit ну и соответственно v4.14.002b.
Это часть кода, как минимум, в конце необходимо поставить HALT.
И скорее всего придётся поиграться с задержками...