[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Andrey_A, ХарВик, chip642  
Получение списка файлов в скрипте и изменение даты
Andrey_AДата: Четверг, 01.12.2016, 09:34 | Сообщение № 1
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
Вынесены сообщения в отдельную тему...

.


 
ПаразитДата: Четверг, 01.12.2016, 09:34 | Сообщение № 2
Майор

На сайте с: 27.02.2016
Город: Быково
Сообщений: 86
Награды: 0
Репутация: 0
Привет. Такая задача, для тех, кто хорошо знает 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
Награды: 0
Репутация: 0
Андрей, а как сделать так, чтобы все полученные аргументы выводились в одном окне через пробел?

Код
#include <Array.au3>

For $i=1 To $CmdLine[0]
  $sPath=$CmdLine[$i]
Next
MsgBox(0,"",""&$sPath&"")
 
asmadeusДата: Четверг, 01.12.2016, 09:34 | Сообщение № 5
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Паразит, а так не проходит?
Код
#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
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
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
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Andrey_A, ну извини, ошибся, впредь не буду лезть
 
ПаразитДата: Четверг, 01.12.2016, 09:35 | Сообщение № 10
Майор

На сайте с: 27.02.2016
Город: Быково
Сообщений: 86
Награды: 0
Репутация: 0
Андрей, а почему у меня не получается ко всем переданным файлам изменить дату изменения?

Код
#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
Награды: 0
Репутация: 0
Андрей, это наконец то, чего я добивался, спасибо
 
asmadeusДата: Четверг, 01.12.2016, 09:36 | Сообщение № 13
Генералиссимус

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1375
Награды: 29
Репутация: 32
Паразит, отлично, а сразу поставит задачу нельзя было?
 
ПаразитДата: Четверг, 01.12.2016, 09:36 | Сообщение № 14
Майор

На сайте с: 27.02.2016
Город: Быково
Сообщений: 86
Награды: 0
Репутация: 0
Андрей, а почему такая же конструкция не получается на 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]


 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Интеллектуальные права и отказ от ответственности