Страница 1 из 3
Создание информационных файлов
Добавлено: Пт дек 19, 2014 20:56
KatMuse
Доброго времени суток, уважаемые форумчане!
Подскажите, пожалуйста, как реализовать следующую задумку:
есть файлы, подготовленные для записи на диск.
Диск 10 <-- папка
File1.iso <-- файл
File2.rar <-- файл
Как сделать такую папку:
Моя папка
File1.iso.txt --содержание--> см. Диск 10
File2.rar.txt --содержание--> см. Диск 10
К сожалению, мне не хватает навыков написать такой скрипт, а беспорядок на диске уже надоел

Большая просьба помочь. Спасибо!
[mod="Avada"]Прежний заголовок темы "Заместитель для файла" заменён на более осмысленный.[/mod]
Добавлено: Пт дек 19, 2014 23:35
MVV
Просто уточняю задачу.
Типа, надо для каждого файла
File.Ext из папки
DiskName создать файл
File.Ext.txt с текстом
--содержание--> см. DiskName
?
Добавлено: Пт дек 19, 2014 23:52
KatMuse
MVV
спасибо за ответ!
Да, всё так и есть - это такой "заместитель для файла", который указывает где хранится файл, то есть на каком диске.
Если бы можно было добавить ещё, например, размер файла, расширение и время создания, то есть сделать заместитель более информативным, то было бы вообще идеально! Но, вообще говоря, хотелось бы иметь, хотя бы ссылку на место хранения.
Добавлено: Сб дек 20, 2014 00:21
MVV
Можно таким батником:
Код: Выделить всё
@echo off
md .descr
for %%F in (*) do call :do_file "%%F"
goto :EOF
:do_file
echo %~1
for /f "delims=" %%D in ("%~dp1\.") do set foldername=%%~nxD
echo [%foldername%]>".descr\%~1.txt"
echo %~nxtza1>>".descr\%~1.txt"
Сохранить как .bat, перетащить на панель инструментов тотала
и очистить поле пути запуска.
Для каждого файла из текущей папки создаст в подпапке
.descr файл с описанием в виде:
[$mltwcx]
--a--c--- 21.11.2014 11:25 55500 _z_src_09.cab
(имя папки в скобках, затем информация о файле)
Добавлено: Сб дек 20, 2014 00:29
KatMuse
Супер! Спасибо!
MVV
Скажите, а можно, чтобы были ещё и подпапки задействованы? То есть, для всех файлов во вложенных папках?
Ещё раз большое спасибо! Кажется, наконец, будет порядок

Добавлено: Сб дек 20, 2014 00:30
MVV
С подпапками немного сложнее будет. Надо было сразу сказать об этом.
Код: Выделить всё
@echo off
for /f "delims=" %%D in ("%CD%") do set diskname=%%~nxD
call :do_dir "%CD%\" "%CD%\.descr\" ""
goto :EOF
:do_dir
echo [%diskname%\%~3]
md "%~2%~3"
for /D %%D in ("%~1%~3\*") do if not "%%~nxD" == ".descr" call :do_dir "%~1" "%~2" "%~3%%~nxD\"
for %%F in ("%~1%~3\*") do call :do_file "%%F" "%~2" "%~3"
goto :EOF
:do_file
set descrfile=%~2%~3%~nx1.txt
echo %~1 ^> %descrfile%
echo [%diskname%\%~3]>"%descrfile%"
echo %~nxtza1>>"%descrfile%"
goto :EOF
Я лично у себя использую архиваторный плагин DiskDirExtended и содержимое каждого диска упаковываю в файл-список. Потом в одну папку складываю файлы-списки от всех дисков, и можно в них входить как в каталоги и видеть файлы, их размеры, атрибуты. И поиском по этим архивам легко найти нужный файл.
Добавлено: Сб дек 20, 2014 01:38
KatMuse
Спасибо за ответ!
С подпапками немного сложнее будет. Надо было сразу сказать об этом.
Извините...
Невероятно... мечта сбылась! Спасибо!
Скажите, а можно у Вас уточнить про совсем идеальный вариант?
То есть, чтобы размер был в мегабайтах и с приставкой Мб, а параметры файла располагались по строкам:
Имя файла: My documet.docx
Размер: 0.5 Мб
Дата создания: 01.01.2014
Атрибуты: --a------
Извините, Вы мне очень помогли, просто я сначала постеснялся высказывать идеальный вариант...
Ещё раз Вам большое спасибо!!!!
Спасибо за плагин! Он супер!
Добавлено: Сб дек 20, 2014 21:44
MVV
Это легко. Но дата указывается модификации, а не создания. По большому счёту, именно она имеет ценность. Последнюю часть файла надо модифицировать:
Код: Выделить всё
:do_file
set descrfile=%~2%~3%~nx1.txt
echo %~1 ^> %descrfile%
echo Location: %diskname%\%~3>"%descrfile%"
echo Name: %~nx1>>"%descrfile%"
set /a filesize=%~z1 / 1048576
echo Size: %filesize% MB (%~z1 B)>>"%descrfile%"
echo Modified: %~t1>>"%descrfile%"
echo Attributes: %~a1>>"%descrfile%"
goto :EOF
Надписи можно исправить. Единственный момент: всё сохраняется в кодировке 866, поэтому и русский текст тоже надо в ней писать.
Добавлено: Сб дек 20, 2014 22:31
KatMuse
MVV
спасибо Вам огромное!!!!
Это просто предел мечтаний!!!
Если можно, то могли бы Вы прокомментировать, что здесь что, очень хочется разобраться, но не хватает навыков... do_file это ведь процедура правильно?
Добавлено: Вс дек 21, 2014 00:39
MVV
Вообще, :do_file - это просто метка, но да, переход на неё выполняется в виде вызова процедуры. Ей передаются 3 параметра: путь к исходному файлу, путь к папке .descr и относительный путь к папке файла относительно корня диска. %~2 - путь к папке .descr без кавычек (модификатор ~), %~nx1 - имя и расширение без кавычек (модификатор ~nx) исходного файла, %~a1 - атрибуты (все возможные модификаторы можно посмотреть в консоли по команде call /?). Знак > означает вывод в новый файл, знак >> - дозапись в файл. При этом ^> просто печатает символ >. Путь к файлу предварительно помещается в переменную окружения и строится из пути к папке .descr, относительного пути к текущей папке, имени и расширения текущего файла и добавочного расширения .txt.
Для обработки каталога определена метка :do_dir, принимает три параметра: путь к корню диска, путь к папке .descr и относительный путь к текущей папке относительно базовых. Процедура сначала вызывает себя для вложенных папок (при этом к относительному пути добавляется имя очередной папки, которое извлекается модификатором ~nx, как и в :do_file), затем для каждого файла в папке вызывает :do_file. В команде for можно выбрать любую букву для подстановки пути к очередному элементу, я взял %F для файлов и %D для папок. Символ процента в команде for надо удваивать, если она пишется в батнике, а не напрямую в консоли.
Ну а в начале файла просто вызывается :do_dir для исходной папки с пустым относительным путём.Вообще, :do_file - это просто метка, но да, переход на неё выполняется в виде вызова процедуры. Ей передаются 3 параметра: путь к исходному файлу, путь к папке .descr и относительный путь к папке файла относительно папки диска. %~2 - путь к папке .descr без кавычек (модификатор ~), %~nx1 - имя и расширение без кавычек (модификатор ~nx) исходного файла, %~a1 - атрибуты (все возможные модификаторы можно посмотреть в консоли по команде call /?). Знак
Добавлено: Вт дек 23, 2014 12:31
KatMuse
MVV
спасибо за объяснение!
Благодаря Вам искать файлы на компьютере стало на много легче!
Спасибо, что подробно объяснили!
Была бы возможность, наставил бы Вам море плюсиков

Добавлено: Вт дек 23, 2014 13:51
MVV
Рад был помочь.
Но советую всё-таки присмотреться к плагину DiskDirExtended, о котором я выше писал.

Он позволяет не только видеть в своих архивах список и атрибуты файлов на диске, но может также представлять архивы в виде папок, т.е. в таком каталоге будут видны файлы внутри RAR, ISO и других файлов на диске.
Добавлено: Ср дек 24, 2014 19:30
KatMuse
MVV
Уже присмотрелся - это восхитительно!!!!!!!
Спасибо!
У меня теперь осталась последняя идея фикс

Создать текстовый файл на основании двух переданных параметров - путь и имя файла.
То есть mybat.bat "C:\temp" "test.jpg" и получаем файл с именем "! test.txt" в каталоге temp.
Описания для файлов, которые лежат на диске (я их не планирую никуда записывать, просто они хранятся на диске). По ctrl-z не удобно, так как при переименовании (опечатку допустил или по-сути не точно) всё стирается. Не ли у Вас плагина для этого

Написал код, но он не работает...
SetLocal EnableDelayedExpansion
Set folder=%2
Echo(>"%1.txt"
Start ""%2"\"%1.txt""
Подскажите, пожалуйста, что нужно исправить?
Добавлено: Ср дек 24, 2014 20:01
Flasher
KatMuse
У нас тут не принято в одной теме запрашивать функционал, отходящий от сути сабжа, который, кстати, легко находится самостоятельно. Только
один из примеров. Читаем низ памятки.
Добавлено: Ср дек 24, 2014 20:34
KatMuse
Flasher,
Прошу прощения, но я не понял Ваш комментарий...
Речь идёт о всё том же заместителе, но только для одного файла.
Указанную ссылку я находил, но там предлагается использовать notepad "%O.txt" , а это, к сожалению, не совсем то.
Неужели новую тему создавать?