Страница 2 из 13

Добавлено: Пн май 02, 2011 18:17
Tol!k
Тупо

Код: Выделить всё

cmd=cmd /c title Копия... &for %u in (
param=%S) do (echo f|xcopy/y/c/h/r/k/z %%u "Копия %%~u"&echo f|xcopy/y/c/h/r/k/z %%u "Копия %%~nu (2)%%~xu"&echo f|xcopy/y/c/h/r/k/z %%u "Копия %%~nu (3)%%~xu"&echo f|xcopy/y/c/h/r/k/z %%u "Копия %%~nu (4)%%~xu"&echo f|xcopy/y/c/h/r/k/z %%u "Копия %%~nu (5)%%~xu")
Не знаю как в em_
но чтобы уместить 5 копий в кнопку, пришлось пожертвовать 1 ключём

Добавлено: Вт май 03, 2011 02:09
Flasher
Tol!k писал(а):Тупо
Универсализируем?

Для тех, кому необходимо часто создавать статическое число копий:

Код: Выделить всё

' Cоздать указанное число копий для каждого выделенного файла 
' вида "<имя_файла> (x)" с приращением x+1 по счётчику"
' Параметры: %L "<путь назначения>" "первая цифра счётчика" "число копий"
' Пример: %L "%P" 2 5
'=======================================================
With CreateObject("Scripting.FileSystemObject")
Set TempFile = .OpenTextFile(WScript.Arguments(0), 1)
Do While Not TempFile.AtEndOfStream
Set File = .GetFile(TempFile.ReadLine)
For i=WScript.Arguments(2) to Abs(WScript.Arguments(3))+Abs(WScript.Arguments(2))-1
File.Copy WScript.Arguments(1)&.GetBaseName(File)&" ("&i&")."&.GetExtensionName(File),False
next
Loop
End With
Для тех, кому требуется вводить разное число копий для разных ситуаций:

Код: Выделить всё

' Cоздать копии (с указанием их кол-ва) для каждого выделенного 
' файла вида "<имя_файла> (x)" с приращением x+1 по счётчику"
' Параметры: %L "<путь назначения>" "первая цифра счётчика"
' Пример: %L "%T" 1
'=======================================================
Count = InputBox("Введите число копий для каждого файла",_
"Копирование выделенных файлов по счётчику")
With CreateObject("Scripting.FileSystemObject")
Set TempFile = .OpenTextFile(WScript.Arguments(0), 1)
Do While Not TempFile.AtEndOfStream
Set File = .GetFile(TempFile.ReadLine)
For i=WScript.Arguments(2) to Abs(Count)+Abs(WScript.Arguments(2))-1
File.Copy WScript.Arguments(1)&.GetBaseName(File)&" ("&i&")."&.GetExtensionName(File),False
next
Loop
End With
Слегка поправил свой старый скрипт для схожей задачи. Решил обойтись без слова "Копия". Хотя это легко поправимо:
File.Copy WScript.Arguments(1)&"Копия "&File.Name,False
For i=WScript.Arguments(2) to Abs(WScript.Arguments(3))+Abs(WScript.Arguments(2))-2
File.Copy WScript.Arguments(1)&"Копия "&.GetBaseName(File)&" ("&i&")."&.GetExtensionName(File),False

Добавлено: Вт май 03, 2011 09:13
ask-rus
Tol!k писал(а):но чтобы уместить 5 копий в кнопку, пришлось пожертвовать 1 ключём
Не критично? Чтобы идеально давай сократим до 3-х копий, у меня не выходит.

Добавлено спустя 13 минут 18 секунд:
Flasher писал(а):Хотя это легко поправимо
Аналогично, не смог поправить. Менял две строки скрипта на эти три - ошибки.

Добавлено: Вт май 03, 2011 12:55
Вахмурка

Добавлено: Вт май 03, 2011 14:06
Flasher
ask-rus писал(а):Менял две строки скрипта на эти три - ошибки.
Значит учтено не всё: скрипт(1/2), параметры. Если второе, то и без замены ошибки будут.

Добавлено: Пн май 09, 2011 12:07
Tol!k
Предыстория. Если в имени есть & или ) и нет пробела, то

Код: Выделить всё

for %%U in (%S) do ...
работать не будет. Лучше так

Код: Выделить всё

[em_FileCopy]
button=%COMMANDER_PATH%\wcmicons.dll,3
cmd=%ComSpec% /c title Копия... &for /f "delims=" %u in ('type
param=%WL') do (echo f|xcopy/y/c/h/r/k/z "%%~u" "%%~du%%~pu\Копия %%~nu%%~xu"&echo f|xcopy/y/c/h/r/k/z "%%~u" "%%~du%%~pu\Копия %%~nu (2)%%~xu"&echo f|xcopy/y/c/h/r/k/z "%%~u" "%%~du%%~pu\Копия %%~nu (3)%%~xu"&echo f|xcopy/y/c/h/r/k/z "%%~u" "%%~du%%~pu\Копия %%~nu (4)%%~xu"&echo f|xcopy/y/c/h/r/k/z "%%~u" "%%~du%%~pu\Копия %%~nu (5)%%~xu")
iconic=1
menu=Атака клонов
ask-rus писал(а):> пришлось пожертвовать 1 ключём
Не критично?
В данном случае (копирование в ту же самую папку) не имеет значения.

Добавлено: Пт май 20, 2011 06:52
Flasher
shveicar писал(а):В данном случае я имел в виду скрипт позволяющий создать с помощью кнопки сразу 100 папок
>>>

Код: Выделить всё

' Cоздать каталоги (с указанием их кол-ва) c именами выделенных
' папок/файлов вида "<имя_папки> (x)" с приращением x+1 по счётчику"
' Параметры: %L "<путь назначения>" "первая цифра счётчика"
' Пример: %L "%T" 1
'=======================================================
Count = InputBox("Введите число копий для каждой папки",_
"Создание папок по счётчику")
With CreateObject("Scripting.FileSystemObject")
Set TempFile = .OpenTextFile(WScript.Arguments(0), 1)
  On Error Resume Next
Do While Not TempFile.AtEndOfStream
Set Folder = .GetFolder(TempFile.ReadLine)
Set File = .GetFile(TempFile.ReadLine)
  For i=WScript.Arguments(2) to Abs(Count)+Abs(WScript.Arguments(2))-1
    .CreateFolder WScript.Arguments(1)&.GetBaseName(Folder)&" ("&i&")"
    .CreateFolder  WScript.Arguments(1)&.GetBaseName(File)&" ("&i&")"
  next
Loop
End With

Клонирование файла

Добавлено: Пт окт 21, 2011 08:58
DeathStalker
Интересует клонирование файла(ов), как сделать из одного файла несколько. К сожалению по поиску не нашел.

Добавлено: Пт окт 21, 2011 09:24
Batya
DeathStalker писал(а):Интересует клонирование файла(ов), как сделать из одного файла несколько.
F5 не пробовал?

Какой вопрос, такой ответ.

Добавлено: Пт окт 21, 2011 09:30
DeathStalker
хм, не совсем понимаю как с помощью F5 быстро сделать 200 копий файла...

Извиняюсь, если вопрос показался не совсем понятным.
Как результат ожидается увидеть заданное количество файлов например с тем же именем + счетчик.

Добавлено: Пт окт 21, 2011 09:54
MVV
Следовало в первом посте ясно изложить задачу, телепатов тут нет. В первом посте нет ни слова про количество копий.

Интересно, какой вообще смысл в таком количестве копий одного и того же файла? Может, с тем же успехом можно просто создать пустых файлов?

Добавлено: Пт окт 21, 2011 10:15
Maximus
DeathStalker
bat-файл

Код: Выделить всё

for /L %%i in (1,1,200) do copy file.txt file%%i.txt

Добавлено: Пт окт 21, 2011 10:18
DeathStalker
MVV писал(а):Следовало в первом посте ясно изложить задачу, телепатов тут нет. В первом посте нет ни слова про количество копий.
Если бы мне нужно 1 копия файла, я бы тему не создавал.

Копии файлов мне нужны были для создания из нескольких сгенерированных bmp файлов клип avi (создаю плагином avi). Т.к. я сейчас ограничен во времени, искать другие способы создания клипа avi некогда. Собственно я уже все что надо сделал в ручную.
Но ответ на вопрос все равно интересует, может пригодиться в будущем. Причем желательно ответ в виде небольшого скрипта для консоли чтобы его можно было повесить на кнопку.

Добавлено спустя 33 секунды:

Maximus
Большое спасибо!

Добавлено: Пт окт 21, 2011 10:42
MVV

Код: Выделить всё

@echo off
if -%3==- echo Parameters: %%P%%N [first_number last_number]&pause&goto :EOF
set maxn=9
:maxnl
if %3 leq %maxn% goto maxnok
set maxn=9%maxn%
goto maxnl
:maxnok
echo %maxn%
for /l %%i in (%2,1,%3) do call :go %1 %%i
goto :EOF

:go
set num=%2
if 1%num% geq %maxn% goto zerok
set num=0%num%
:zerok

echo copy %1 "%~dpn1%num%%~x1"
goto :EOF
Такой файл будет создавать нумерованные копии с дополнительными нулями в числах, чтобы число цифр было одинаковым. Запускать кнопкой с параметрами %P%N 1 200 - это создаст копии с номерами от 001 до 200, дописанными в конец имени перед расширением.

Добавлено: Пт окт 21, 2011 10:46
Вахмурка