===================================================================== AJPapps - Make new dir Линда Кайе 2016-2020. Посвящается Ариэль ===================================================================== Этот скрипт создаёт каталог с порядковым номером или датой-временем в названии. Таким образом все каталоги, имена для которых пока не придуманы, будут идти по порядку, и не нужно будет вспоминать, какое сегодня число или какой там номер был последним. Так же можно создать каталог с уникальным именем в виде GUID, только в нижнем регистре и без скобочек. История создания ---------------- До того как была написана первая версия этого скрипта, я использовала два BAT файла с такими строками: > MD %date:~-4%.%date:~-7,2%.%date:~-10,2% > MD "%date:~-4%.%date:~-7,2%.%date:~-10,2% %time:~,2%.%time:~3,2%.%time:~6,2%" Это было ненадёжно, и я взялась за этот скрипт. Название скрипта может показаться не сильно оригинальным, но появилось оно благодаря тому, что первые непубличные версии скрипта были представлены аж четырьмя файлами: • MakeNewNumberDir.VBS • MakeNewDateDir.VBS • MakeNewTimeDir.VBS • MakeNewDateTimeDir.VBS Чтобы не держать зоопарк дублирующегося кода, я сделала единый скрипт, смысл которого меняют параметры при запуске. История изменений ----------------- • 23.09.2016 Первая публичная версия ^^ • 3.07.2017 [-] В Usage и везде было указано расширение файла VBS, тогда как на самом деле оно теперь - WSF. [+] Добавлен режим GUID. • 28.02.2018 [+] Оптимизирован алгоритм поиска свободных имён папок, в результате чего создание новой папки в каталоге, где уже есть тысяча папок, проходит гораздо быстрее. • 25.11.2018 [+] Убрала ReadMe из заголовка скрипта Main.VBS. Чтобы не было дублей. [+] Поправила ReadMe.TXT, в том числе исправила очепятку в лицензии. [+] Добавлен параметр /Multi, при наличии которого, после создания каталога, скрипт спрашивает, нужно ли создать ещё один. [+] Добавлен параметр /ReverseSearch, заставляющий скрипт искать свободный элемент в обратном порядке. • 1.09.2019 [-] Поправила копирайт в Main.VBS. [+] Обновила общие модули. [+] Добавила поддержку вывода списка созданных каталогов в текстовый файл. [+] Привела ReadMe.TXT к современному виду. [+] Переписала некоторую часть ReadMe.TXT. • 26.10.2020 [+] Добавлен параметр /GuidTrail. [+] Добавлен параметр /WebName. Примеры получаемых каталогов ---------------------------- ...и используемые при этом параметры. • 0010 ==> /Number • 2016.09.12 ==> /Date • 2016.09.24-03 ==> /Date /Number • 11.33.28 ==> /Time • 23.45.15-06 ==> /Time /Number • 2016.04.02 18.33.55 ==> /Date /Time • 2017.11.22 06.12.01-03 ==> /Date /Time /Number • e52ff1bc-c620-46e3-891b-5cb488750b25 ==> /Guid • 4ab6c462-4928-4e8d-9afe-0e6cbd4ab131 ==> /Guid /Number Все примеры с параметром /Number (кроме первого и последнего) отражают ситуацию, когда каталоги с таким именем уже есть, и скрипту пришлось добавить цифровой хвостик, что бы обойти эту ситуацию. Обратите внимание, что GUID - уникальное число, поэтому эффект от ключа /Number, очевидно, увидеть не получится. Использование ------------- Скрипт принимает следующие параметры: > MakeNewDir.WSF [/Number] [/Date] [/Time] [/Guid] > [/Digits:n] [/IgnoreTrail] [/Multi] > [/ReverseSearch] [/List:filename] > [/UnicodeList] [/BackSlashList] > [/GuidTrail] [/WebName] [BaseFolder] • BaseFolder - это каталог, в котором будет создан новый каталог. Если этот параметр опущен, то будет использован текущий каталог (будьте внимательны при работе с сетевыми адресами). • /Digits - количество цифр в номере. Принимает значения от 0 до 10. Если параметр опущен или указан ноль, будет использовано значение по умолчанию: 4 для отдельного номера и 2 для даты/времени. При попытке найти свободное имя для нового каталога, скрипт будет учитывать это число. Так, если в этом параметре указано 3, то скрипт будет пробегаться от "000" до "999". • /IgnoreTrail - заставляет скрипт пропускать каталоги с хвостиками. Например, скрипт пытается создать каталог "0010", а в папке есть каталог "0010 - Ariel". Скрипт посчитает, что каталог "0010" существует и пропустит его, перейдя к каталогу "0011". • /Multi - указывает скрипту после создания каталога выводить запрос на создание ещё одного. Работает только в GUI версии (WScript.EXE). • /ReverseSearch - указывает скрипту производить поиск свободного элемента в обратном порядке. Тоесть, если у нас есть каталоги 0000 и 0050, то без этого параметра скрипт создаст каталог 0001, а с этим параметром - 0051. При наличии этого параметра, с увеличением количества цифр в номере, увеличивается время поиска свободного элемента. • /List - задаёт имя файла, в который скрипт сохранит список созданных каталогов в порядке их создания. • /UnicodeList - указывает скрипту сохранить список в кодировке UTF-16 вместо ANSI. • /BackSlashList - указывает скрипту сохранить имена каталогов с обратным слэшем на конце. • /GuidTrail - указывает скрипту дописать в конце имени нового каталога хвост с GUID. • /WebName - указывает скрипту убирать лишние пробелы и точки в имени нового каталога, заменяя их на чёрточки. Полезно для выгрузки на вэб сервер. У параметров есть псевдонимы: > /N = /Number /D = /Date /T = /Time > /G = /Guid /C = /Digits /IT = /IgnoreTrail > /M = /Multi /R = /ReverseSearch /BS = /BackSlashList > /L = /List /U = /UnicodeList /GT = /GuidTrail > /W = /WebName Режимы работы скрипта --------------------- Скрипт работает в трёх режимах: создание каталога с номером, создание каталога с датой-временем и создание каталога с GUID. Первый режим включается, когда указан параметр /Number, но отсутствуют параметры /Date, /Time и /Guid. В этом режиме имя нового каталога выглядит примерно так: "0000". Нумерация начинается с нуля. Второй режим включается, если указаны параметры /Date, /Time или оба сразу. В этом случае имена каталогов будут собраны с учётом текущего времени в форматах: "yyyy.mm.dd" и "hh.mm.ss" (разделители - точки). При этом, если параметр /Number указан, скрипт сначала попытается создать каталог с датой/временем в названии, а если такой уже существует, то попытается добавить в название номер. Так, если каталог "2013.10.11" существует, скрипт попытается создать каталог "2013.10.11-01" (номера начинаются с единицы). Если же параметр /Number не указан, скрипт просто выдаст сообщение об ошибке. Третий режим включается, если указан параметр /Guid. При этом можно добавить параметр /Number, и поведение в таком случае будет таким же как во втором режиме, но GUID - уникальное число, и создание двух каталогов с одинаковым GUID теоретически не возможно. Параметр /Guid не совместим с параметрами /Date и /Time. GUID trail ---------- Использование параметра /GuidTrail имеет побочный эффект, поскольку новый каталог создаётся с хвостиком. Так, при создании нескольких каталогов последовательными вызовами или при использовании параметра /Multi, может измениться поведение программы, либо каталоги вообще не будут создаваться. При создании каталога с параметром /Number и без параметра /IgnoreTrail, каждый раз будет создаваться каталог "0000" с хвостиком, поскольку скрипт будет считать предыдущие каталоги единым целым, а не числом и хвостиком. При создании каталогов с параметрами /Date и /Time, а так же с параметром /IgnoreTrail, но без параметра /Number, возможны ошибки, поскольку скрипт может выбрать имя, которое уже существует (хоть и с другим хвостиком). При создании каталога с параметром /Guid, новый каталог будет выглядеть как два GUID'а через чёрточку, что может быть излишним. Вэб имена --------- Параметр /WebName предназначен для создания каталогов максимально дружественных для вэб серверов. Вот пример его работы: • 2020.10.26 ==> 2020-10-26 • 2020.10.26 04.22.54 ==> 2020-10-26-04-22-54 • 0000 - bedc9b7d-8e0b-40a9-a60c-d38938c8782c ==> 0000-bedc9b7d-8e0b-40a9-a60c-d38938c8782c Как видно из примера, создаваемые каталоги выглядят несколько иначе, чем ожидается. Это имеет побочный эффект на такие параметры как /Multi, /GuidTrail и /IgnoreTrail, поскольку при последующих итерациях создания каталогов (и при повторных запусках скрипта), скрипт будет искать предыдущие каталоги, созданные без ключа /WebName. Таким образом, рекомендуется использовать этот параметр с осторожностью. Использование в FAR ------------------- При вызове скрипта из FAR (например, из пользовательского меню), можно настроить автоматический переход к первому созданному каталогу. Для этого нужно указать имя файла списка и использовать его совместно с плагином FAR Commands. Вот пример: > CScript.EXE MakeNewDir.WSF /GUID /UL /L:"%TEMP%\FCMD.LST" > goto: <"%TEMP%\FCMD.LST" При этом курсор будет просто переведён на каталог. Чтобы FAR входил в него, нужно чтобы имена каталогов в списке был с обратным слэшем на конце. Делается это так: > CScript.EXE MakeNewDir.WSF /GUID /UL /BS /L:"%TEMP%\FCMD.LST" > goto: <"%TEMP%\FCMD.LST" Если каталогов будет создано несколько, то FAR выберет первый из списка, а остальные проигнорирует. Для вызова GUI версии рекомендуется использовать команду START, чтобы FAR ждал завершения работы скрипта. Вот пример создания кучи каталогов и перехода к первому из них: > START /W "" WScript.EXE MakeNewDir.WSF /GUID /Multi /UL /L:"%TEMP%\FCMD.LST" > goto: <"%TEMP%\FCMD.LST" Маленький копирайт ------------------ 1. Программа и исходный код распространяются бесплатно. 2. Вы имеете право распространять их на тех же условиях. 3. Вы не имеете права использовать имя автора после модификации исходного кода. 4. При этом желательно указывать ссылку на автора оригинальной версии исходного кода. 5. Вы не имеете права на платное распространение исходного кода, а также программных модулей, содержащих данный исходный код. 6. Программа и исходный код распространяются как есть. Автор не несёт ответственности за любые трагедии или несчастные случаи, вызванные использованием программы и исходного кода. 7. Для любого пункта данного соглашения может быть сделано исключение с разрешения автора программы. 8. По любым вопросам, связанным с данной программой, обращайтесь по адресу lindaoneesama@gmail.com Контакты -------- Почта: lindaoneesama@gmail.com Сайт: https://www.lindachan.net