Показать полную графическую версию : [решено] Вывод списка файлов и их размеров в байтах из заданной папки
Привет, коллеги!
Нарисуйте, пожалуйста, скрипт, который выведет имена и размеры всех файлов (в байтах) из заданной папки.
В файле должны быть две пользовательские переменные:
%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
Файл записывать в заданную папку и открывать в дефолтном редакторе.
Спасибо!
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. Какой язык программирования предпочтителен?
Iska, спасибо!
1. Кодировка - без разницы, там кириллицы не будет.
2. Выходной - в папку с файлами. Но вообще, можно и не сохранять даже, если это лишний код.
3. Да, в байтах без изысков :)
4. Мне важен рез-т, а не язык.
Протестировал
Команда для запуска (из 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
---------------------------
ОК
---------------------------
Vadikan, каюсь, это из-за:
пока без каких-либо проверок, »
В данном случае, вероятнее всего потому, что отсутствует путь к файлу «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"
а это в выложенном скрипте никак не проверяется. Я добавлю ряд проверок и выложу исправленный скрипт сюда же.
И хотел бы ещё раз уточнить по второму вопросу (лучше прочитать сразу оба пункта, они связаны между собой):
а) Уточните, по возможности, конечную цель запуска редактора с сгенерированным текстом: Вы просто копируете текст без изменений в буфер обмена или как-то правите?
Цель: определить, возможно ли обойтись вовсе без создания файла, а вместо этого попробовать сразу помещать сгенерированный текст в буфер обмена.
б) Если редактор таки нужен, то ещё один вопрос: нужен ли, используется ли в последующем текстовый файл с сгенерированным текстом по закрытии редактора?
Цель: если текстовый файл впоследствии не нужен и никак не используется — возможно, стоит создавать его в папке временных файлов, открывать в редакторе, ждать завершения работы редактора и затем удалять.
Вот вариант скрипта с некоторыми проверками:
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, точно, моя вина... вроде копипастом вставлял пути. Первоначальный скрипт работает!
Да, я просто копирую текст в буфер обмена и вставляю в вебе. Файл мне вроде не нужен потом, но можно не заморачиваться - удалить все файлы с одинаковыми именами из одной библиотеки не проблема. Да и вдруг файлы пригодятся :)
Второй вариант тоже работает, спасибо большое за помощь!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.