View previous topic :: View next topic |
Author |
Message |
Lamer
Joined: 20 Mar 2006 Posts: 522
|
(Separately) Posted: Sun Jul 30, 2006 02:41 Post subject: |
|
|
A.N.T. , ты параметры правильно прописал?
У меня другая ошибка,но я в скриптах не секу. Так что ждём Batуu. |
|
Back to top |
|
 |
Volniy

Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Sun Jul 30, 2006 18:05 Post subject: |
|
|
Lamer wrote: | Так что ждём Batуu. |
Так он вроде по выходным на форуме не появляется. Так что пока даю свой вариант скрипта:
Code: | '=========================[ Start of file ]=========================
' File: NonStopCopy.vbs
' Description: Производит копирование (рекурсивное) выделенных
' файлов и папок утилитой Non-Stop Copy
' Installation: Создайте кнопку на панели TC
' Команда: "диск:\путь\к\файлу\nonstopcopy.vbs"
' Параметры: "%L" "%T" (именно в кавычках!)
' Изменить! Const Exe = """Путь к файлу nscopy.exe"""
' Copyright: (c) 2006, Volniy
Option Explicit
Const Exe = """C:\Hard\nscopy\nscopy.exe"""
Dim FSO, WSH
Dim SourceList, TargetDir, TargetFile, cnt, Entry
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
SourceList=Wscript.Arguments(0)
TargetDir=Wscript.Arguments(1)
Set SourceList = FSO.OpenTextFile(SourceList, 1)
Do While Not SourceList.AtEndOfStream
Entry = SourceList.ReadLine
If FSO.FileExists(Entry) Then
TargetFile = FSO.BuildPath( TargetDir, FSO.GetFileName(Entry))
WSH.Run Exe & " """ & Entry & """ """ & TargetFile & """ /e", 0, True
cnt = cnt +1
End If
If FSO.FolderExists(Entry) Then
Call FolderProcess(FSO.GetFolder(Entry), FSO.GetFolder(Entry).name)
End If
Loop
MsgBox "Скопировано " & cnt & " файл(а,ов)!", vbInformation,"Завершено!"
Set SourceList = Nothing
Set FSO = Nothing
Wscript.Quit()
Function FolderProcess(CurrFolder, SDir)
Dim sf, f, p
p=FSO.BuildPath(TargetDir, SDir)
On Error Resume Next
FSO.CreateFolder p
On Error Goto 0
For Each sf in CurrFolder.SubFolders
Call FolderProcess(sf, FSO.BuildPath( SDir, sf.Name))
Next
For Each f in CurrFolder.Files
TargetFile = FSO.BuildPath(p, f.name)
WSH.Run Exe & " """ & f.Path & """ """ & TargetFile & """ /e", 0, True
cnt = cnt +1
Next
End Function
'=========================[ End of file ]========================= |
Кнопка:
Quote: | TOTALCMD#BAR#DATA
C:\Scripts\nonstopcopy.vbs
"%L" "%T"
C:\Hard\nscopy\nscopy.exe
Скопировать с помощью Non-Stop Copy
-1
|
|
|
Back to top |
|
 |
Lamer
Joined: 20 Mar 2006 Posts: 522
|
(Separately) Posted: Mon Jul 31, 2006 02:31 Post subject: |
|
|
Volniy wrote: | Так он вроде по выходным на форуме не появляется. |
Ну дак я и сказал
Lamer wrote: | Так что ждём Batуu. |
Я же не написал,сколько ждём
А за скрипт спасибо! |
|
Back to top |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2227 Location: Москва, Россия
|
(Separately) Posted: Mon Jul 31, 2006 11:34 Post subject: |
|
|
Всем привет
Скрипт исправил:
Code: | If Wscript.Arguments.Count < 3 Then
MsgBox "Неправильно заданы параметры. Параметров должно быть не менее 3." & chr(13) & _
"Парметры для вызова из TotalCmd:" & chr(13) & _
"startset.vbs {Путь\nscopy.exe} %L "%T" {Параметры}", _
vbOKOnly + vbCritical, _
"Ошибка!"
Wscript.Quit()
End If
Dim FSO, StreamFile, WSH
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
Dim Selected, Exe, Arg, Args, Target
Exe = Wscript.Arguments(0)
Target = Wscript.Arguments(2)
If Not FSO.FolderExists(Target) Then
MsgBox "Неправильно заданы параметры." & chr(13) & _
"Третьим параметром должна быть папка назначения (в TotalCmd можно написать %T).", _
vbOKOnly + vbCritical, _
"Ошибка!"
Set FSO = Nothing
Set WSH = Nothing
Wscript.Quit()
End If
For i = 4 To Wscript.Arguments.Count
Args = Args & " " & Wscript.Arguments(i - 1)
Next
Set StreamFile = FSO.OpenTextFile(WScript.Arguments(1), 1)
Do While Not StreamFile.AtEndOfStream
Selected = StreamFile.ReadLine
If FSO.FileExists(Selected) Then
WSH.Run Exe & " """ & Selected & """ """ & Target & _
FSO.GetFileName(Selected) & """" & Args
End If
If FSO.FolderExists(Selected) Then
FolderProcess FSO.GetFolder(Selected), Target & FSO.GetBaseName(Selected) & "\"
End If
Loop
Set FSO = Nothing
Set WSH = Nothing
Set StreamFile = Nothing
Wscript.Quit()
Function FolderProcess(CurrFolder, TargetFolder)
Dim sf, f
If Not FSO.FolderExists(TargetFolder) Then
FSO.CreateFolder(TargetFolder)
End If
For Each sf in CurrFolder.SubFolders
FolderProcess sf, TargetFolder & sf.Name & "\"
Next
For Each f in CurrFolder.Files
WSH.Run Exe & " """ & f & """ """ & TargetFolder & _
FSO.GetFileName(f) & """" & Args
Next
End Function |
Кнопка для вызова:
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\WHS\startset.vbs %COMMANDER_PATH%\Utils\NonStopCopy\nscopy.exe
%L "%T" /e
%COMMANDER_PATH%\Icons\X-Qute.icl
Копирование с помощью NonStopCopy
-1
|
Last edited by Batya on Mon Jul 31, 2006 13:36; edited 2 times in total |
|
Back to top |
|
 |
Volniy

Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Mon Jul 31, 2006 12:58 Post subject: |
|
|
Batya wrote: | Скрипт исправил: |
У меня, как обычно , есть пару замечаний.
1) Не стоит включать в скрипт неиспользуемый объект. Я имею ввиду WSH Script Helper. Ведь его просто может не оказаться у пользователя и скрипт не заработает.
2) Если в командную строку скрипта передаются пути, их обязательно нужно помещать в кавычки, иначе при наличии в этих путях пробелов количество (да и качество ) передаваемых параметров будет абсолютно неверным (попробуй сам скопировать файл в Program Files). Именно поэтому я всегда и пишу что-то типа этого:
Quote: | Параметры: "%L" "%T" (именно в кавычках!) |
Кавычки никогда не помешают  |
|
Back to top |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2227 Location: Москва, Россия
|
(Separately) Posted: Mon Jul 31, 2006 13:31 Post subject: |
|
|
Volniy
1. Просто взял за основу существующий скрипт. В пятницу очень поропился, а сегодня не обратил внимания.
2. Согласен. Только %L не обязательно в кавычки помещать. Имя временного файла в коротком формате передается.
Спасибо за замечания. Сейчас поправлю исходный пост. |
|
Back to top |
|
 |
Volniy

Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Mon Jul 31, 2006 15:05 Post subject: |
|
|
Batya wrote: | Только %L не обязательно в кавычки помещать. Имя временного файла в коротком формате передается. |
Действительно. Но все равно "лучше перебдеть, чем недобдеть" (с)  |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|