![]() |
[решено] Сохранение структуры папок и ее воссоздание с текстовыми файлами вместо файлов
Есть папка с названием "Структура1" в ней много файлов и подпапок. Файлы и подпапки которые находятся в ней содержат имена из: знаков, русских, английских букв. Есть еще вторая пустая папка с названием "Структура2". Нужно скопировать структуру всех подпапок, которые находятся в папке "Структура1" в папку "Структура2" но без файлов которые в ней находятся, а вместо файлов в ту же папку "Структура2" создать пустые txt-файлы с их именами и плюс с датой когда был создан тот или иной файл.
До батника вид такой: Структура1: Документ.doc, Фото.jpg ; Подпапка2: Программа.exe, Текст.txt ; Подпапка3: MP3.mp3, MP4.mp4, AVI.avi Структура2: После выполнения батника должен вид такой быть: Структура1: Документ.doc, Фото.jpg ; Подпапка2: Программа.exe, Текст.txt ; Подпапка3: MP3.mp3, MP4.mp4, AVI.avi Структура2: Документ - 02.04.2020-12.05.34.txt, Фото - 14.03.2020-17.14.45.txt ; Подпапка2: Программа - 21.05.2020-12.05.34.txt, Текст - 02.02.2020-15.05.43.txt ; Подпапка3: MP3 - 02.06.2020-12.05.34.txt, MP4 - 02.06.2020-12.05.34.txt, AVI - 02.06.2020-12.05.34.txt Все что получилось у меня это создать батник который сохраняет структуру подпапок в текстовый файл, а потом запуском еще вторым батником из ранее сохраненного текста структуры подпапок восстанавливать структуру т.е. таким карявым методом как бы создавать копию структуры подпапок, правда для это мне приходится менять внешний жесткий диск, так как все скопированные пути на восстановление в тестовом файле начинаются с него (папка "Структура1" для примера находится на внешнем жестком диске). И после этого я уже с внешнего жесткого диска копирую структуру подпапок в нужную мне папку, но это уж совсем неудобно. Переписать пути с помощью батника так, чтобы подпапки восстановились в конкретную папку т.е. в папку "Структура2" не знаю как. На втором шаге, я нашел в интернете: "создание пустых txt-файлов с именами содержимого папки с помощью батника", но батник создает текстовые файлы с именами файлов из одной папки в которой запустился, а в подпапках нет. Тут нужно еще чтобы текстовые файлы создавались не в той папке откуда берутся имена ("Структура1"), а чтобы текстовые файлы создавались в папке "Структура2" после того как туда скопируется структура пустых подпапок. Я совсем запутался в кодах батника. Помогите пожалуйста! Народ, кто в этом разбирается?! как это можно реализовать в батнике? |
Powershell:
Код:
$in = "C:\temp\Структура1" |
Не совсем то, что нужно. Конечно он структуру подпапок и файлов с их именами он скопировал, но можно как то сделать так чтобы в имени еще была дата и время изменения файла плюс расширение, например чтобы скопированные файлы в своем имени выглядели вот так: Апельсин.jpg - 02.06.2020-14.03.01
|
Serezha373737, это Powershell, а не CMD, у вас вторая часть скрипта не отрабатывает.
|
DJ Mogarych, да у меня видимо действительно вторая часть скрипта не отрабатывает. В Powershell я не очень разбираюсь, если сможете, то помогите пожалуйста исправить.
|
Надо сохранить этот код в файл с расширением .ps1 и запускать его правой кнопкой мышки - "Выполнить с помощью Powershell".
|
Выполнил: Надо сохранить этот код в файл с расширением .ps1 и запускать его правой кнопкой мышки - "Выполнить с помощью Powershell". Теперь совсем ничего не создает..даже подпапки! Которые ранее создавались если я просто копировал код и вставлял в окно Powershell. При запуске открывается на доли секунды окно Powershell: в нем только удалось разглядеть за доли секунды красным цветом "не удалось загрузить файл
|
Цитата:
|
Serezha373737, Бат-файл. Сохранить в 866 кодировке. Ввозможны пропуски файлов с спецсимволами.
Код:
@Echo Off |
Цитата:
|
Да, именно в Akelpad я и сделал, все как нужно! Всем огромное спасибо за помощь! megaloman, твой код сотворил чудо! СПАСИБО!!! :)
Тему уже я конечно закрыл, так как все работает так как надо, но дабы еще одну похожую тему не создавать у меня еще вопрос. А как можно еще сделать в этом же батнике чтобы были в конце и секунды? :) например так: Фото.jpg-06.10.2016-23.50.29 ? |
Цитата:
Код:
Апельсин - 2020.06.02-14.03.01.jpg |
можно и так, главное чтобы было! :)
ну так как там добавить секунды еще в конце?) |
Serezha373737, Вы про чей код?
|
Serezha373737, Это эстетствующий каприз? За секунды в CMD придётся заплатить долгим временем выполнения. Разве кто из спецов PowerShell заинтересуется. И, опять же, возможны пропуски файлов с необрабатываемыми в CMD символами в именах.
Код:
@Echo Off |
Цитата:
Код:
Param( |
Iska, Вы про чей код?
Iska, почитайте ВНИМАТЕЛЬНЕЕ мои последние сообщения. Первый код был Powershell, а второй код bat. Или вы не знаете что такое "БАТНИК" ?! Слова: " megaloman, твой код сотворил чудо!" "А как можно еще сделать В ЭТОМ ЖЕ БАТНИКЕ чтобы были в конце и секунды?" ...тут речь идет о bat. На данный момент Iska, код bat только один - от megaloman! ............................................................................... megaloman, Спасибо за код! Теперь уже с секундами! И Да! Есть каприз небольшой :) То, что касается долгим временем выполнения - это не критично! А вот то, что возможны пропуски файлов с не обрабатываемыми в CMD символами в именах, нужно найти вариант это как то исправить...каприз заключается как раз и в этом, что я пытался все реализовать в bat-нике, при этом не используя PowerShell. PowerShell - этот вариант подходит если уж совсем в батнике никак не сделать! DJ Mogarych, Вам тоже спасибо за помощь! :) |
Цитата:
|
Fors1k_m, Желаемый результат я НЕ получил! Ваш код Не работает! При выполнении, показывает черное окно и ничего не происходит! Долгое время ждал когда выполнит, но опять ничего.
.................................. Fors1k_m, логика в том что я делаю программу, которая будет выполняется в загрузочной операционной системе т.е. в оперативной памяти. В загрузочной операционной системе я вырезаю некоторые НЕКРИТИЧНЫЕ программы, службы и утилиты, чтобы освободилось больше оперативной памяти для разных операций, так как вся операционная система находится полностью в оперативной памяти. И поэтому я не вижу смысла только для этого загружать powershell и другие программы, чтобы они там висели в памяти и потребляли ресурсы ОЗУ. |
Serezha373737, с cmd с символами будут проблемы. Как вариант, можно подумать о vbs или js, если Вас такое устроит.
|
Да vbs тоже подходит! Если сможете сделать и на vbs буду очень рад :) может в vbs пропусков спец символов не будет
|
Цитата:
|
Цитата:
Цитата:
:shot: |
Цитата:
|
artenaki, любая пунктуация, которая не входит в OEM/866.
Serezha373737, это безграмотность, а вовсе не «профессиональный жаргон», литератор Вы наш. |
Цитата:
|
VBS сохранить 1251
Код:
BoxIn = "D:\Мой контент" |
Цитата:
|
megaloman, СПАСИБО!!! Вы просто волшебник, настоящий профессионал!!! :) Решили мою проблему сразу bat и vbs файлом!
....................................................................... Цитата:
Кто мне помогал ОГРОМНОЕ СПАСИБО! Тему можно закрыть :) Все что было нужно - отлично работает!!! |
Serezha373737, Без перебранок, пожалуйста! Полезнее спокойно разобраться, в чем дело.
ИМХО, каждый, кто предлагает код, его тестирует и уверен в его работоспособности. PowerShell, возможно, у Вас более старой версии. Ради интереса: В командном окне запустите PowerShell Выполните команду Host Посмотрите версию. |
megaloman, разница в версии PowerShell - это не причина того, что что я что-то не умею запускать. Если код работает в определенной версии PowerShell автор по идеи должен указать на какой версии PowerShell код работает, как Вы например указываете кодировку и т.д. Я сам по образованию программист. У меня стоит PowerShell версия 2.0
Или хотя бы спросить какая у меня версия PowerShell, а потом только создавать код. С точки зрения программиста вещи очевидные! :) |
Serezha373737, Тут недавно была аналогичная проблема. Я случайно об нее споткнулся. Обновитесь хотя бы до 5.1
|
megaloman, Да, но опять же, если кто то создает код в PowerShell, то спросить у пользователя какая у него версия PowerShell перед созданием кода не судьба?! :)
|
Serezha373737, А что, всё можно предусмотреть? В Win 10 эта версия вроде бы ставится стандартно вместе с обновлениями. Просто логично предполагать, что если вы юзаете PowerShell, то Вы позаботились о его актуальности.
|
megaloman, не нужно никогда надеется на то что у пользователя, программы будут актуальной версии!!! В том числе и на то, что пользователь пользуется Windows 10!!! Хотя слово "актуальной" тут не совсем уместно, правильнее лучше назвать "старой версии", потому что старые версии тоже рабочие. Операционные системы тоже есть разные у всех. Пример: с чего вдруг заказчик такси ЛОГИЧНО ПРЕДПОЛОЖИТ что к нему приедет жигули??? Ведь автомобилей много бывает разных всяких марок и моделей?! Для этого оператор и уточняет у заказчика при звонке "от куда" и "куда нужно приехать" т.е. задает уточняющие вопросы чтобы построить маршрут! Тоже же самое и с любыми программами, утилитами и т.д. Тот кто создает код, тоже нужно уточнить для каких программ, операционных систем и т.д. нужно создать код, если для работоспособности кода это важно. И тогда создатель кода уже сможет построить маршрут, чего и что создавать. Я согласен с тем, что все предусмотреть нельзя! Но, не уточнив куда и от куда ехать, как можно надеется и логично предполагать что приедут?! :) megaloman
|
Зачастую составитель скрипта может поручиться только за версию, установленную у него. Разве что у него есть виртуалки с новыми или старыми версиями.
|
artenaki, не о том речь идет, что может или не может поручиться...за свою версию или не за свою, а речь идет о том что составителю скрипта необходимо уточнять версию программы у пользователя на котором собирается работать скрипт составителя. Для чего же тогда создатели программ на своих сайтах программ указывают для загрузки информацию о том на каких операционных систем программа будет работать: Windows 7, 8, 10; 64 битная или нет, минимум NET Framework 4 или выше....неужели все создатели указывают эту информацию для пользователей просто так?! А указывают именно потому, что понимают что у каждого пользователя может быть установлена разная операционная система, могут быть у каждого пользователя установлены разные NET Framework..например допустим NET Framework 3.5 - не просто так это пишут, а для того чтобы сразу пользователю уточнить на каких условиях программа будет работать, в данном случае из приведенного примера: только NET Framework 4 и выше, что является критичным при выполнении программы. Соответственно, так как составитель скрипта не знает на чем будет выполняться скрипт, то необходимо у пользователя уточнить условия где будет выполняться скрипт. artenaki, отсюда делаем вывод: что если зачастую составитель скрипта может поручиться только за свою версию, установленную у него, то это не означает что на других скрипт будет работать!
|
Цитата:
Общение здесь строится на взаимном уважении и обратной связи. Требовать и говорить, что вам что-то здесь должны, неуместно. |
Цитата:
Если Вы пришли за помощью, то и озаботиться о предоставлении наиболее полной информации о том, какие программные средства у Вас в наличии, необходимо именно Вам, а не тем, кто будет эту помощь осуществлять. Это первое. Второе: насколько оправданно, размещение вопроса на нескольких форумах одновременно, причем с учеток, зарегистрированных перед публикацией вопроса... при этом, публикуя код с одного форума на другом, слегка его "поправив", представлять его как собственный? Кто Вы после этого? Цитата:
Третье: если берётесь кого-либо обвинять в незнании русского языка, то не совершайте грамматических и синтаксических ошибок, в том самом, русском языке, иначе ваши обвинения выглядят очень смешно... Был тут один персонаж, очень напоминаете его по стилю ... на месте помогающих, я бы прекратил вообще какую-либо помощь Вам. |
Время: 08:14. |
Время: 08:14.
© OSzone.net 2001-