VBS Изменение даты модификации файла

Паразит

Пользователь
Сообщения
61
Симпатии
2
Баллы
18
#1
[COLOR=#0000ff]// Перенесено из темы:[/COLOR] [URL]http://safezone.cc/threads/ispolzovanie-argumentov-komandnoj-stroki.28623/[/URL]

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

Код:
Sub Date(FileName, NewDate)
Dim WshArguments, i, list, lists, FileName1
set WshArguments=WScript.Arguments
if WshArguments.count()=0 then
    MsgBox "Я не вижу аргументов"
else
for i=0 to WshArguments.Count-1
       list = list & WshArguments(i) & " "
       'list.ModifyDate = NewDate
Next
    MsgBox list
End if
End Sub
Date FileName, "2001-01-01"

Нулевой аргумент %P%S. Чтобы воспользоваться методом ModifyDate, мне требуется объект.
Возможно-ли, как-то обойтись без объекта?
Может как-то так?

With Arg()
.ModifyDate = NewDate
End With+
Как решить эту задачу?
 
Последнее редактирование модератором:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,961
Симпатии
5,783
Баллы
588
#2
У VBScript нет своих методов, которые позволяли бы оперировать штампом времени файловых объектов.

и да, свойство DateLastModified объекта File только ReadOnly.

Поэтому, чтобы изменить это поле даты у файла, используйте или объект Shell.Application, или WMI.
Пример:

VB.NET:
Touch "c:\temp", "getclip.exe", "2012-01-01"

Sub Touch(FolderPath, FileName, NewDate)
  Set app = CreateObject("Shell.Application")
  Set folder = app.NameSpace(FolderPath)
  Set file = folder.ParseName(FileName)
  file.ModifyDate = NewDate
End Sub
 

Паразит

Пользователь
Сообщения
61
Симпатии
2
Баллы
18
#3
Dragokas, с помощью этого скрипта невозможно обработать несколько файлов. Разве что, если создавать временный файл.
Почему, потому что здесь два аргумента. Даже если я передам их отдельно (%P %S), я не смогу создать список файлов.
Аргументов же два, правильно? Как я создам переменную i, чтобы каждому выделенному файлу присвоить номер индекса?
Я думаю, что это невозможно. Надо придумать, как обойтись без объекта в моём скрипте.
Или как создать временную переменную (объект), присвоив ей i, чтобы произвести этому индексу обработку с помощью нужного метода.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,961
Симпатии
5,783
Баллы
588
#4
Зачем передавать отдельно? Расщепите путь в самом скрипте.

VB.NET:
sPath = "c:\temp\getclip.exe"

Set oFSO = CreateObject("Scripting.FileSystemObject")

sDir = oFSO.GetParentFolderName(sPath)
sFile = oFSO.GetFileName(sPath)

Touch sDir, sFile, "2012-01-01"
 
Сверху Снизу