Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Вывод списка файлов и их размеров в байтах из заданной папки (http://forum.oszone.net/showthread.php?t=202052)

Vadikan 15-03-2011 12:43 1635326

Вывод списка файлов и их размеров в байтах из заданной папки
 
Привет, коллеги!

Нарисуйте, пожалуйста, скрипт, который выведет имена и размеры всех файлов (в байтах) из заданной папки.
В файле должны быть две пользовательские переменные:
%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

Файл записывать в заданную папку и открывать в дефолтном редакторе.

Спасибо!

Iska 16-03-2011 02:09 1635868

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. Какой язык программирования предпочтителен?

Vadikan 16-03-2011 03:22 1635881

Iska, спасибо!

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

Vadikan 17-03-2011 23:23 1637513

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

Команда для запуска (из 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

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


Iska 18-03-2011 01:12 1637588

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"

а это в выложенном скрипте никак не проверяется. Я добавлю ряд проверок и выложу исправленный скрипт сюда же.


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

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

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

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

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

Iska 18-03-2011 01:42 1637599

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

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 автоматически;
* имя самого создаваемого текстового файла не будет помещёно в список.

Vadikan 18-03-2011 23:16 1638321

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

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

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


Время: 23:33.

Время: 23:33.
© OSzone.net 2001-