Windows скрипт список файлов

VBScript/JScript: Получить список файлов и их свойства

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 3

1 Тема от CheHu 2010-10-29 16:38:06

Тема: VBScript/JScript: Получить список файлов и их свойства

Нужна помощь в написании скрипта, который выполняет следующие действия:

— обрабатывает каталог, указанный параметром на входе, получая иерархическую структуру входящих в него папок и файлов.
— для файлов получает свойства (размер файла, полный путь, дата создания, дата последнего редактирования, расширение (тип), название, тема, автор, категория, ключевые слова, комментарии).
— формирует txt или xml файл, который записывает по адресу, указанному во входящем параметре.

Дополнительный функционал (если это возможно):
— на основании подготовленного шаблона с перечнем файлов (txt или xml) внести изменения в свойства этих файлов (тема, автор, категория, ключевые слова, комментарии) и сохранить их.

Частично похожие скрипты здесь попадались, но мои знания пока на уровне плинтуса.
Прошу помочь.

Цель затеи: инвентаризация существующих файлов и присвоение тегов для дальнейшего использования.

2 Ответ от jite 2010-10-30 01:04:57

  • jite
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Re: VBScript/JScript: Получить список файлов и их свойства

Все очень просто. Именно по этой причине местные старожилы вряд ли будут вам внятно — 100 раз отвечено, и приведено в примерах.

Но не расстраивайтесь, вот вам кусочки из которых все это соберете.
1) обход дерева файлов/папок:

2) Свойства получать через oFS.GetFile().Свойство (в примере выше использовалось одно из них — Name)
Ассортимент (для общего представления) следующий:

Свойства oFile (файла)
————————-
oFile <. >Object
Path «D:\00\Scripts\_debug-logs-files\file_props.js» String
Name «file_props.js» String
ShortPath «D:\00\Scripts\_DEBUG

1.JS» String
ShortName «FILE_P

1.JS» String
Drive <. >Object
ParentFolder <. >Object
Attributes 32 Object
DateCreated 10.05.2010 15:48:10 Date
DateLastModified 10.05.2010 15:54:02 Date
DateLastAccessed 10.05.2010 15:48:10 Date
Size 221 Variant
Type «JScript Script File» String

Свойства oFolder (папки)
—————————
— oFolder <. >Object
Path «D:\00\Scripts\_debug-logs-files» String
Name «_debug-logs-files» String
ShortPath «D:\00\Scripts\_DEBUG

1″ String
ShortName «_DEBUG

1″ String
— Drive <. >Object
Path «D:» String
DriveLetter «D» String
ShareName «» String
DriveType 2 Object
+ RootFolder <. >Object
AvailableSpace 551718150144 Variant
FreeSpace 551718150144 Variant
TotalSize 1000203087872 Variant
VolumeName «wdj» String
FileSystem «NTFS» String
SerialNumber 143236712 Number
IsReady true Boolean
+ ParentFolder <. >Object
Attributes 16 Object
DateCreated 02.05.2010 18:37:11 Date
DateLastModified 10.05.2010 15:48:10 Date
DateLastAccessed 10.05.2010 15:48:10 Date
Type «Папка с файлами» String
IsRootFolder false Boolean
Size 16531 Variant
— SubFolders <. >Object
Item Object
_NewEnum <. >Object
Count 0 Number
— Files <. >Object
Item Object
_NewEnum <. >Object
Count 10 Number

3) Чтение/запись:
(к данному коду следует относиться критически — это демо с тучей ненужностей. Скорее не рабочий код, а рассуждения на тему «а что если. «)

var sReadFileName = «4_read.txt»;
var sWriteFileName = «4_write.txt»;

var sReadFileFullName = sGetReadFileFullName(sReadFileName);
var sWriteFileFullName = sGetReadFileFullName(sWriteFileName);

var oReadFile, oWriteFile, oAppendFile;

var ForReading = 1, ForWriting = 2, ForAppending = 8; //Ручками прописываем режимы!
var oFS = new ActiveXObject(«Scripting.FileSystemObject»);

//Чтение файла
var sMsg = sReadFileFullName + » «;
sMsg += oFS.FileExists(sReadFileFullName) ? «есть!» : «нет»;
WScript.Echo(sMsg);
if (oFS.FileExists(sReadFileFullName))
<
try
<
/*Синтаксис object.OpenTextFile(filename[, iomode[, create[, format]]])
iomode: ForReading = 1, ForWriting = 2, ForAppending = 8
create: если запрошенный файл не существует true создавать, false не создавать
format: -2 Opens the file using the system default
-1 Opens the file as Unicode
0 Opens the file as ASCII
*/
oReadFile = oFS.OpenTextFile(sReadFileFullName, ForReading, false); //3-й параметр
/*Возможные ошибки при OpenTextFile():
* путь до файла не существует,
* атрибут RO (hidden, system — не мешают),
* недостаточные права доступа
* недостаток места на диске (впрочем, это уже в процессе записи в файл)
*/
WScript.Echo(«Содержимое файла » + sReadFileName + «:\n» + oReadFile.ReadAll());
WScript.Echo(«—\nЧтение его же по строкам:»);
oReadFile.Close();
oReadFile = oFS.OpenTextFile(sReadFileFullName, ForReading, false); //По достижении конца надо заново переоткрывать
//while(!oReadFile.AtEndOfStream) //как вариант
for ( var i = 1; !oReadFile.AtEndOfStream; i++)
<
var txt = ((i » + oReadFile.ReadLine() + » 3 Ответ от CheHu 2010-11-01 10:44:18

Re: VBScript/JScript: Получить список файлов и их свойства

Спасибо за код и за ссылки.
Для начала подойдет, буду экспериментировать.

7 скриптов для Windows, которые помогут сэкономить время

Для исполнения следующих скриптов мы обратимся к PowerShell. Любой системный администратор (по профессии или в душе) знает его возможности и периодически пользуется, для всех остальных это просто интерфейс командной строки или иностранное слово. На популярных ресурсах вы можете найти уйму идей, как использовать PowerShell для развлечения и дела, здесь же мы рассмотрим лишь простые скрипты, которые помогут войти в курс дела.

Выключение и перезапуск

Итак, самая простая операция выключения вашего компьютера. Открываем блокнот, прописываем:

Сохраняем файл, как *.cmd (*- имя вашего файла, например shutdown.cmd) и не забудьте в типе выбрать “все файлы”. Всё, исполняемый файл по запуску выключит ваш компьютер. “-s”, в данном случае означает выключение, замените на “-r” — получите перезагрузку. “-t” — таймер, у нас он установлен на 0 секунд, но если установить на 60 — получите выключение через 60 секунд.

Удаляем ненужное

В различных сборках, предустановленных на компьютер или ноутбук, вы можете наткнуться на массу абсолютно ненужных пакетов приложений. Удалить их с помощью скрипта проще простого:

get-appxpackage -name *APPNAME* | remove-appxpackage

Как вы понимаете, *APPNAME* — название неинтересующей надстройки. Да, удалять эти пакеты можно стандартным путём или через специальные программы, но вы можете создать скрипт, который удалит их все одним двойным кликом.

Управляем процессами

Есть в PowerShell две полезные команды, которые позволят бороться с ветряными мельницами (процессами, снижающими быстродействие). Вывести их на экран можно просто прописав:

или информацию о конкретном сервисе под кодовым названием *NAME* (на этом месте должно быть название интересующего сервиса):

Но это можно сделать в диспетчере задач, а вот действительно полезным может оказаться создание файла, который по клику закрывал бы все процессы с повышенным потреблением ресурсов (браузеры, антивирусы и пр.). Для этого воспользуйтесь командой Stop-Service:

Stop-Service -Name *ANTIVIRUS*

Stop-Service -Name *BROWSER*

Названия для замены указаны в * *.

Переименовываем группу файлов

Ещё одна назойливая проблема: вы скопировали с фотоаппарата или телефона изображения. Огромная куча фотографий, которые называются однотипно вроде HGNMD034, где HGNMD — название общей директории, объединяющей файлы, например, отснятые за один день. Для того, чтобы сделать название этих файлов приятнее или иметь возможность объединить несколько папок, не получив при этом хронологическую путаницу из-за имен, можно использовать скрипт группового переименования:

$path = «$comp\desktop\journey\russia»
$filter = ‘*.jpg’
get-childitem -path $path -filter $filter |
rename-item -newname

В первой строке в кавычках укажите точный путь к файлам. Во второй строке — расширение файлов, подлежащих изменению. В последней строке вместо “HGNMD” — общее в названиях файлов, подлежащее замене, на что-то, вместо “RUSSIA” — имя, которое вы хотите присвоить. Если данный скрипт опять сохранить в качестве исполняемого файла, то подобные однотипные операции будут отнимать у вас всего несколько секунд времени.

Ищем файлы

Ещё одна простая задача, реализуемая на PowerShell — поиск файлов в директории. В данном случае рассмотрим поиск log-файлов:

Или чуть более сложный пример, когда поиск будет производиться ещё и в подпапках:

Get-ChildItem C:\Windows\* -Include *.log -Recurse -Force

Это чуть более правильная и полная запись, где “Include” — указывает на искомую часть, “Recurse” — на поиск во вложенных каталогах, “Force” — поиск включает в себя системные и скрытые файлы.

Справка

Итак, с общими принципами функционирования PowerShell мы более-менее разобрались. Если что-то непонятно — обратитесь к справочной информации следующим образом:

Это команда, которая выведет на экран все доступные команды с кратким описанием. Хотите подробнее? Нет ничего проще:

Get-Help -Name *CMDLET*

Где вместо *CMDLET* вставьте любую интересующую команду.

Находим данные

Теперь перейдём к простым скриптам, описанным чуть более сложными командами. Например, с помощью PowerShell вы можете выудить почти всю информацию о железе и комплектующих. Как вариант, вот скрипт для оценки уровня заряда аккумулятора:

Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.PowerStatus].GetConstructor(‘NonPublic, Instance’, $null, [Type[]]@(), $null ).Invoke($null)

Архитектура процессора удалённого компьютера:

[PSObject].Assembly.GetType( ‘System.Management.Automation.PsUtils’
).GetMethod(‘GetProcessorArchitecture’, [Reflection.BindingFlags]40
).Invoke($null, @())

Иногда важной задачей бывает проверка прав администратора у текущего пользователя. Вот простой способ на PowerShell:

[PSObject].Assembly.GetType(‘System.Management.Automation.Utils’).GetMethod(
‘IsAdministrator’, [Reflection.BindingFlags]40).Invoke($null, @())

На этом пока остановимся. Как вы наверное убедились, PowerShell не самый сложный, но очень полезный инструмент, который способен выполнять, как простейшие операции, так и достаточно сложные. Однако PowerShell не единственный инструмент для создания скриптов для Windows. Но об этом в следующий раз.

Если вы только недавно встали на путь программирования и ещё даже не пробовали поиграться с установленной операционной системой, то манипулирование с помощью скриптов может вызвать резонные вопросы необходимости и удобства. Однако, даже если опустить тот простой факт, что они помогают лучше понять, как функционирует ОС, в будущем при создании приложений, исполнение сценариев может оказаться крайне полезным навыком.

Для исполнения следующих скриптов мы обратимся к PowerShell. Любой системный администратор (по профессии или в душе) знает его возможности и периодически пользуется, для всех остальных это просто интерфейс командной строки или иностранное слово. На популярных ресурсах вы можете найти уйму идей, как использовать PowerShell для развлечения и дела, здесь же мы рассмотрим лишь простые скрипты, которые помогут войти в курс дела.

Выключение и перезапуск

Итак, самая простая операция выключения вашего компьютера. Открываем блокнот, прописываем:

Сохраняем файл, как *.cmd (*- имя вашего файла, например shutdown.cmd) и не забудьте в типе выбрать “все файлы”. Всё, исполняемый файл по запуску выключит ваш компьютер. “-s”, в данном случае означает выключение, замените на “-r” — получите перезагрузку. “-t” — таймер, у нас он установлен на 0 секунд, но если установить на 60 — получите выключение через 60 секунд.

Удаляем ненужное

В различных сборках, предустановленных на компьютер или ноутбук, вы можете наткнуться на массу абсолютно ненужных пакетов приложений. Удалить их с помощью скрипта проще простого:

get-appxpackage -name *APPNAME* | remove-appxpackage

Как вы понимаете, *APPNAME* — название неинтересующей надстройки. Да, удалять эти пакеты можно стандартным путём или через специальные программы, но вы можете создать скрипт, который удалит их все одним двойным кликом.

Управляем процессами

Есть в PowerShell две полезные команды, которые позволят бороться с ветряными мельницами (процессами, снижающими быстродействие). Вывести их на экран можно просто прописав:

или информацию о конкретном сервисе под кодовым названием *NAME* (на этом месте должно быть название интересующего сервиса):

Но это можно сделать в диспетчере задач, а вот действительно полезным может оказаться создание файла, который по клику закрывал бы все процессы с повышенным потреблением ресурсов (браузеры, антивирусы и пр.). Для этого воспользуйтесь командой Stop-Service:

Stop-Service -Name *ANTIVIRUS*

Stop-Service -Name *BROWSER*

Названия для замены указаны в * *.

Переименовываем группу файлов

Ещё одна назойливая проблема: вы скопировали с фотоаппарата или телефона изображения. Огромная куча фотографий, которые называются однотипно вроде HGNMD034, где HGNMD — название общей директории, объединяющей файлы, например, отснятые за один день. Для того, чтобы сделать название этих файлов приятнее или иметь возможность объединить несколько папок, не получив при этом хронологическую путаницу из-за имен, можно использовать скрипт группового переименования:

$path = «$comp\desktop\journey\russia»
$filter = ‘*.jpg’
get-childitem -path $path -filter $filter |
rename-item -newname

В первой строке в кавычках укажите точный путь к файлам. Во второй строке — расширение файлов, подлежащих изменению. В последней строке вместо “HGNMD” — общее в названиях файлов, подлежащее замене, на что-то, вместо “RUSSIA” — имя, которое вы хотите присвоить. Если данный скрипт опять сохранить в качестве исполняемого файла, то подобные однотипные операции будут отнимать у вас всего несколько секунд времени.

Ищем файлы

Ещё одна простая задача, реализуемая на PowerShell — поиск файлов в директории. В данном случае рассмотрим поиск log-файлов:

Или чуть более сложный пример, когда поиск будет производиться ещё и в подпапках:

Get-ChildItem C:\Windows\* -Include *.log -Recurse -Force

Это чуть более правильная и полная запись, где “Include” — указывает на искомую часть, “Recurse” — на поиск во вложенных каталогах, “Force” — поиск включает в себя системные и скрытые файлы.

Справка

Итак, с общими принципами функционирования PowerShell мы более-менее разобрались. Если что-то непонятно — обратитесь к справочной информации следующим образом:

Это команда, которая выведет на экран все доступные команды с кратким описанием. Хотите подробнее? Нет ничего проще:

Get-Help -Name *CMDLET*

Где вместо *CMDLET* вставьте любую интересующую команду.

Находим данные

Теперь перейдём к простым скриптам, описанным чуть более сложными командами. Например, с помощью PowerShell вы можете выудить почти всю информацию о железе и комплектующих. Как вариант, вот скрипт для оценки уровня заряда аккумулятора:

Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.PowerStatus].GetConstructor(‘NonPublic, Instance’, $null, [Type[]]@(), $null ).Invoke($null)

Архитектура процессора удалённого компьютера:

[PSObject].Assembly.GetType( ‘System.Management.Automation.PsUtils’
).GetMethod(‘GetProcessorArchitecture’, [Reflection.BindingFlags]40
).Invoke($null, @())

Иногда важной задачей бывает проверка прав администратора у текущего пользователя. Вот простой способ на PowerShell:

[PSObject].Assembly.GetType(‘System.Management.Automation.Utils’).GetMethod(
‘IsAdministrator’, [Reflection.BindingFlags]40).Invoke($null, @())

На этом пока остановимся. Как вы наверное убедились, PowerShell не самый сложный, но очень полезный инструмент, который способен выполнять, как простейшие операции, так и достаточно сложные. Однако PowerShell не единственный инструмент для создания скриптов для Windows. Но об этом в следующий раз.

Читайте также:  Как увеличить размер тома windows 10
Оцените статью