Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Вывод списка файлов и их размеров в байтах из заданной папки

Ответить
Настройки темы
Любой язык - [решено] Вывод списка файлов и их размеров в байтах из заданной папки

(*.*)


Сообщения: 36544
Благодарности: 6690


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Привет, коллеги!

Нарисуйте, пожалуйста, скрипт, который выведет имена и размеры всех файлов (в байтах) из заданной папки.
В файле должны быть две пользовательские переменные:
%URL% - мой URL
%MYDIR% - полный путь к папке

Формат вывода:
Код: Выделить весь код
%URL%/file1-name.ext
file1-size
%URL%/file2-name.ext
file2-size
...
и т.д.
Пример:
Код: Выделить весь код
http://oszone.net/path/myfile1.exe
12345678
http://oszone.net/path/myfile2.exe
123456789
Файл записывать в заданную папку и открывать в дефолтном редакторе.

Спасибо!

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 12:43, 15-03-2011

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Vadikan, примерно я набросал:
читать дальше »
Код: Выделить весь код
Option Explicit

' Enum IOMode
Const ForReading   = 1
Const ForWriting   = 2
Const ForAppending = 8


Dim strURL
Dim strFolder
Dim strFile

Dim objFSO
Dim objTS
Dim objFile

Dim objShell
Dim objFolder
Dim objFolderItem


With WScript.Arguments
	strURL    = .Item(0)
	strFolder = .Item(1)
	strFile   = .Item(2)
End With

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strFolder) Then
	With objFSO.OpenTextFile(strFile, ForWriting, True)
		For Each objFile In objFSO.GetFolder(strFolder).Files
			.WriteLine strURL & "/" & objFile.Name
			.WriteLine objFile.Size
		Next
		
		.Close
	End With
	
	Set objShell = WScript.CreateObject("Shell.Application")
	Set objFolder = objShell.NameSpace(objFSO.GetParentFolderName(strFile))
	
	If Not objFolder Is Nothing Then
		Set objFolderItem = objFolder.ParseName(objFSO.GetFileName(strFile))
		
		If Not objFolderItem Is Nothing Then
			objFolderItem.InvokeVerb "Edit"
			
			Set objFolderItem = Nothing
		End If
		
		Set objFolder = Nothing
	End If
	
	Set objShell = Nothing
Else
	WScript.Echo "Can't find folder [" & strFolder & "]"
End If

Set objFSO = Nothing

WScript.Quit 0
Примерный вызов скрипта:
Код: Выделить весь код
Script.vbs "http://oszone.net/path" "C:\Downloads\Software" "E:\Песочница\0040\0004.txt"

пока без каких-либо проверок, ибо есть ряд вопросов:
читать дальше »
1. Какая нужна кодировка выходного файла (в примере — «ANSI»).

2. Куда класть выходной файл (в примере — кладётся туда, куда указано в командной строке при вызове скрипта). Или его, фактически, вообще можно не сохранять, а требуется только само сгенерированное содержимое, например, дабы скопировать его в буфер обмена?

3. Размер нужен именно в байтах, без изысков — как-то: деление на триады («2,855,699»), приведение к нормализованному виду («2,789 Кб»/«2,7 Мб»)?

4. Какой язык программирования предпочтителен?
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:09, 16-03-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


(*.*)


Сообщения: 36544
Благодарности: 6690

Профиль | Сайт | Отправить PM | Цитировать


Iska, спасибо!

1. Кодировка - без разницы, там кириллицы не будет.
2. Выходной - в папку с файлами. Но вообще, можно и не сохранять даже, если это лишний код.
3. Да, в байтах без изысков
4. Мне важен рез-т, а не язык.

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 03:22, 16-03-2011 | #3


(*.*)


Сообщения: 36544
Благодарности: 6690

Профиль | Сайт | Отправить PM | Цитировать


Протестировал

Команда для запуска (из cmd):
Код: Выделить весь код
contest_video.vbs "http://oszone.net/video/ie9/" "C:\Users\Name\Documents\Content_OSZone\IE9-Video\Name" "C:\Users\Name\Documents\Conent_OSZone\IE9-Video\Name\publish.txt"
Код: Выделить весь код
---------------------------
Windows Script Host
---------------------------
Сценарий:	C:\Users\Vadik\Documents\scripts\contest_video.vbs
Строка:	31
Символ:	2
Ошибка:	Путь не найден
Код:	800A004C
Источник: 	Ошибка выполнения Microsoft VBScript

---------------------------
ОК   
---------------------------

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 23:23, 17-03-2011 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Vadikan, каюсь, это из-за:
Цитата Iska:
пока без каких-либо проверок, »
В данном случае, вероятнее всего потому, что отсутствует путь к файлу «C:\Users\Vadik\Documents\Conent_OSZone\IE9-Video\Viktor Golub\publish.txt»:
Код: Выделить весь код
"C:\Users\Name\Documents\Content_OSZone\IE9-Video\Name"
"C:\Users\Name\Documents\Conent_OSZone\IE9-Video\Name\publish.txt"
а это в выложенном скрипте никак не проверяется. Я добавлю ряд проверок и выложу исправленный скрипт сюда же.


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

а) Уточните, по возможности, конечную цель запуска редактора с сгенерированным текстом: Вы просто копируете текст без изменений в буфер обмена или как-то правите?

Цель: определить, возможно ли обойтись вовсе без создания файла, а вместо этого попробовать сразу помещать сгенерированный текст в буфер обмена.

б) Если редактор таки нужен, то ещё один вопрос: нужен ли, используется ли в последующем текстовый файл с сгенерированным текстом по закрытии редактора?

Цель: если текстовый файл впоследствии не нужен и никак не используется — возможно, стоит создавать его в папке временных файлов, открывать в редакторе, ждать завершения работы редактора и затем удалять.

Последний раз редактировалось Vadikan, 18-03-2011 в 23:17. Причина: заменил реальные имена на Name

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:12, 18-03-2011 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Вот вариант скрипта с некоторыми проверками:
читать дальше »
Код: Выделить весь код
Option Explicit

' Enum IOMode
Const ForReading   = 1
Const ForWriting   = 2
Const ForAppending = 8


Dim strURL
Dim strFolder
Dim strFile

Dim objFSO
Dim objTS
Dim objFile

Dim objShell
Dim objFolder
Dim objFolderItem


With WScript.Arguments
	If .Count = 3 Then
		strURL    = .Item(0)
		strFolder = .Item(1)
		strFile   = .Item(2)
	Else
		WScript.Echo "Usage: " & WScript.ScriptName & " <Url path> <Folder to scan> <File to output>"
		WScript.Quit 1
	End If
End With


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

strFolder = objFSO.GetAbsolutePathName(strFolder)
strFile   = objFSO.GetAbsolutePathName(strFile)

If objFSO.FolderExists(strFolder) Then
	If objFSO.FolderExists(objFSO.GetParentFolderName(strFile)) Then
		If Right(strURL, 1) <> "/" Then
			strURL = strURL & "/"
		End If
		
		With objFSO.OpenTextFile(strFile, ForWriting, True)
			For Each objFile In objFSO.GetFolder(strFolder).Files
				If objFile.Path <> strFile Then
					.WriteLine strURL & objFile.Name
					.WriteLine objFile.Size
				End If
			Next
			
			.Close
		End With
		
		Set objShell = WScript.CreateObject("Shell.Application")
		Set objFolder = objShell.NameSpace(objFSO.GetParentFolderName(strFile))
		
		If Not objFolder Is Nothing Then
			Set objFolderItem = objFolder.ParseName(objFSO.GetFileName(strFile))
			
			If Not objFolderItem Is Nothing Then
				objFolderItem.InvokeVerb "Edit"
				
				Set objFolderItem = Nothing
			End If
			
			Set objFolder = Nothing
		End If
		
		Set objShell = Nothing
	Else
		WScript.Echo "Can't find path [" & objFSO.GetParentFolderName(strFile) & "] to create file [" & strFile & "]"
	End If
Else
	WScript.Echo "Can't find folder [" & strFolder & "]"
End If

Set objFSO = Nothing

WScript.Quit 0
* проверяется существование путей папки для сканирования и файла со сгенерированным текстом;
* url может задаваться как с конечным слэшем, так и без — слэш будет добавлен в Url автоматически;
* имя самого создаваемого текстового файла не будет помещёно в список.

Последний раз редактировалось Iska, 19-03-2011 в 08:41. Причина: Опечатка

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:42, 18-03-2011 | #6


(*.*)


Сообщения: 36544
Благодарности: 6690

Профиль | Сайт | Отправить PM | Цитировать


Iska, точно, моя вина... вроде копипастом вставлял пути. Первоначальный скрипт работает!

Да, я просто копирую текст в буфер обмена и вставляю в вебе. Файл мне вроде не нужен потом, но можно не заморачиваться - удалить все файлы с одинаковыми именами из одной библиотеки не проблема. Да и вдруг файлы пригодятся

Второй вариант тоже работает, спасибо большое за помощь!

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 23:16, 18-03-2011 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Вывод списка файлов и их размеров в байтах из заданной папки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Отображение списка файлов из локальной папки на web-странице Delirium Вебмастеру 1 21-10-2010 03:12
Разное - Проблема с переносом файлов больших размеров на плеер The_Berzerker Накопители (SSD, HDD, USB Flash) 2 01-07-2010 07:45
Графика - [решено] Программа для уменьшения размеров GIF файла в байтах. a715 Программное обеспечение Windows 4 16-09-2009 10:41
Вывод списка всех служб, запускаемых от определенной учетки. __sa__nya Microsoft Windows NT/2000/2003 1 14-08-2009 15:29
[решено] Вывод списка файлов с полными путями и размерами Grenky Программное обеспечение Windows 16 03-07-2005 22:14




 
Переход