Получение списка файлов в скрипте и изменение даты
|
|
Andrey_A | Дата: Четверг, 01.12.2016, 09:34 | Сообщение № 1 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
Вынесены сообщения в отдельную тему...
.
|
|
| |
Паразит | Дата: Четверг, 01.12.2016, 09:34 | Сообщение № 2 |
Майор
На сайте с: 27.02.2016
Город: Быково
Сообщений: 86
|
Привет. Такая задача, для тех, кто хорошо знает AutoIt.
Я в Total Commander выделяю файлы с параметром %P%S. Как мне получить строковый массив из выделенных файлов с полными путями?
Код For $i = 0 To $CmdLine[1] $sss = $i ;MsgBox(0, "111", sss) Next MsgBox(0, "111", sss)
|
|
| |
Andrey_A | Дата: Четверг, 01.12.2016, 09:34 | Сообщение № 3 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
Цитата Паразит ( ) выделяю файлы с параметром %P%S Зачем %P%S ? Запускайте скрипт с параметром %L - это временный файл:
Код #include <Array.au3>
If 0=$CmdLine[0]Then Exit
$sLine=FileRead($CmdLine[1])
$aPath=StringRegExp($sLine,"(?m)^([^\r\n]?.*)",3)
_ArrayDisplay($aPath,"Массив $aPath")
For $i=0 To UBound($aPath)-1 $sPath=$aPath[$i] MsgBox(4096,"Переменная","$sPath =>"&$sPath&"<=") Next
---------
Если всё таки нужен %P%S , то пути уже в массиве $CmdLine Но %P%S имеет ограничение...
Код #include <Array.au3>
_ArrayDisplay($CmdLine,"Массив $CmdLine")
For $i=1 To $CmdLine[0] $sPath=$CmdLine[$i] MsgBox(4096,"Переменная","$sPath =>"&$sPath&"<=") Next
.
|
|
| |
Паразит | Дата: Четверг, 01.12.2016, 09:34 | Сообщение № 4 |
Майор
На сайте с: 27.02.2016
Город: Быково
Сообщений: 86
|
Андрей, а как сделать так, чтобы все полученные аргументы выводились в одном окне через пробел?
Код #include <Array.au3>
For $i=1 To $CmdLine[0] $sPath=$CmdLine[$i] Next MsgBox(0,"",""&$sPath&"")
|
|
| |
asmadeus | Дата: Четверг, 01.12.2016, 09:34 | Сообщение № 5 |
|
Паразит, а так не проходит?
Код #include <Array.au3>
For $i=1 To $CmdLine[0] $sPath&=$CmdLine[$i]&" " Next MsgBox(0,"",""&$sPath&"")
|
|
| |
Andrey_A | Дата: Четверг, 01.12.2016, 09:34 | Сообщение № 6 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
Цитата Паразит ( ) как сделать так, чтобы все полученные аргументы выводились в одном окне через пробел
В примере asmadeus, нужно заранее объявить переменную
Код #include <Array.au3> Local $sPath='' For $i=1 To $CmdLine[0] $sPath&=$CmdLine[$i]&" " Next MsgBox(0,"",""&$sPath&"")
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Можно и так:
Код #include <Array.au3> $sLine=_ArrayToString($CmdLine,' ',1) MsgBox(4096,"Переменная $sLine","$sLine =>"&$sLine&"<=")
.
|
|
| |
asmadeus | Дата: Четверг, 01.12.2016, 09:35 | Сообщение № 7 |
|
Andrey_A, офигеть, я уже советы по автоиту даю. Навскидку глянул, код не тестировал. Главное - направление Хотя, как модератор, прошу учесть, что есть тема Скриптинг на Autoit, потому не стоит плодить однотипные темы. Все сообщения перенесу
|
|
| |
Andrey_A | Дата: Четверг, 01.12.2016, 09:35 | Сообщение № 8 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
asmadeus, я бы оставил тему , т.к. она связана именно с Total Commander (с его параметрами)
Что касается темы "Скриптинг на Autoit", то она общая, но вот для подтем нужно создавать другую (а их можнт быт сотни...) - я вот никак не соберусь начать тему "Autoit - Пишем без пробелов или как экономить место в скрипте..." (есть уже более 50-ти советов, но времени для этого пока нет)
.
|
|
| |
asmadeus | Дата: Четверг, 01.12.2016, 09:35 | Сообщение № 9 |
|
Andrey_A, ну извини, ошибся, впредь не буду лезть
|
|
| |
Паразит | Дата: Четверг, 01.12.2016, 09:35 | Сообщение № 10 |
Майор
На сайте с: 27.02.2016
Город: Быково
Сообщений: 86
|
Андрей, а почему у меня не получается ко всем переданным файлам изменить дату изменения?
Код #include <Array.au3> $sLine=_ArrayToString($CmdLine,' ',1) $var = FileSetTime($sLine, "20031101")
Изменяет только первый файл.
Сообщение отредактировал Паразит - Среда, 30.11.2016, 16:20 |
|
| |
Andrey_A | Дата: Четверг, 01.12.2016, 09:35 | Сообщение № 11 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
1. Функция FileSetTime поддерживает файл или папку с маской 2. Ваша строка $sLine под это не походит, более того странная передача.., а если в пути будут пробелы, то вся строка превратится в мусор
Сделайте это в цикле:
Код For $i=1 To $CmdLine[0] FileSetTime($CmdLine[$i], "20031101") Next
|
|
| |
Паразит | Дата: Четверг, 01.12.2016, 09:35 | Сообщение № 12 |
Майор
На сайте с: 27.02.2016
Город: Быково
Сообщений: 86
|
Андрей, это наконец то, чего я добивался, спасибо
|
|
| |
asmadeus | Дата: Четверг, 01.12.2016, 09:36 | Сообщение № 13 |
|
Паразит, отлично, а сразу поставит задачу нельзя было?
|
|
| |
Паразит | Дата: Четверг, 01.12.2016, 09:36 | Сообщение № 14 |
Майор
На сайте с: 27.02.2016
Город: Быково
Сообщений: 86
|
Андрей, а почему такая же конструкция не получается на VBScript?
Код Date FileName, "2003-11-01" 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 = WshArguments(i) 'list.ModifyDate = NewDate 'WshArguments.ModifyDate = NewDate Next '' MsgBox list End if End Sub
Для метода ModifyDate требуется объект. Но если я его создаю, то появляется проблема, что нужна строка, а не объект. Получается замкнутый круг. Как можно обойти эти подводные камни? Может быть, надо как-то создавать промежуточную переменную, и объявлять её как строку?
|
|
| |
Andrey_A | Дата: Четверг, 01.12.2016, 10:55 | Сообщение № 15 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
Цитата Паразит ( ) почему такая же конструкция не получается на VBScript? Потому что VBS кривой))) Я давно перешёл на Autoit (он 1. проще в понимании, 2. гораздо больше примеров 3. полно уже готовых UDF функций, только "подпиливай" под себя) Что-то простое на vbs можно легко сделать, но чем сложнее задача, тем сильнее приходится выкручивать мозг. Это поняли сами создатели и сделали PowerShell ...
Код Dim Shell, FSO Set Shell = CreateObject("Shell.Application") Set FSO = CreateObject("Scripting.FileSystemObject")
Data = "2012-01-01" Cnt = WScript.Arguments.Count
If Cnt = 0 Then MsgBox "Нет параметров..." Else For i = 0 To Cnt - 1 File = WScript.Arguments(i) SetModifyDate File, Data Next End If
MsgBox "Выполнено!"
Sub SetModifyDate(File, NewDate) FolderPath = FSO.GetParentFolderName(File) ' родительский путь FileName = FSO.GetFileName(File) ' имя с расширением Set objFolder = Shell.NameSpace(FolderPath) Set objItem = objFolder.ParseName(FileName) objItem.ModifyDate = NewDate End Sub
Set Shell = Nothing Set FSO = Nothing WScript.Quit
[ps] Всё не освоишь. Рекомендую определиться с выбором изучением языка... [/ps]
|
|
| |