Копирование с переименовыванием по счетчику

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение 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 ключём
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение 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
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

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

Добавлено спустя 13 минут 18 секунд:
Flasher писал(а):Хотя это легко поправимо
Аналогично, не смог поправить. Менял две строки скрипта на эти три - ошибки.
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

ask-rus писал(а):Менял две строки скрипта на эти три - ошибки.
Значит учтено не всё: скрипт(1/2), параметры. Если второе, то и без замены ошибки будут.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение 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 ключём
Не критично?
В данном случае (копирование в ту же самую папку) не имеет значения.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение 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
Аватара пользователя
DeathStalker
Сообщения: 331
Зарегистрирован: Пт сен 01, 2006 10:53
Откуда: Санкт-Петербург

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

Сообщение DeathStalker »

Интересует клонирование файла(ов), как сделать из одного файла несколько. К сожалению по поиску не нашел.
Гугль - это Матрица, чем меньше его спрашивать, тем слабее будут машины во время Великой Битвы
TC10.00b6 x86 Windows 10 x64 (Windows 7 x64)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

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

Какой вопрос, такой ответ.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
DeathStalker
Сообщения: 331
Зарегистрирован: Пт сен 01, 2006 10:53
Откуда: Санкт-Петербург

Сообщение DeathStalker »

хм, не совсем понимаю как с помощью F5 быстро сделать 200 копий файла...

Извиняюсь, если вопрос показался не совсем понятным.
Как результат ожидается увидеть заданное количество файлов например с тем же именем + счетчик.
Гугль - это Матрица, чем меньше его спрашивать, тем слабее будут машины во время Великой Битвы
TC10.00b6 x86 Windows 10 x64 (Windows 7 x64)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Следовало в первом посте ясно изложить задачу, телепатов тут нет. В первом посте нет ни слова про количество копий.

Интересно, какой вообще смысл в таком количестве копий одного и того же файла? Может, с тем же успехом можно просто создать пустых файлов?
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

DeathStalker
bat-файл

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

for /L %%i in (1,1,200) do copy file.txt file%%i.txt
Аватара пользователя
DeathStalker
Сообщения: 331
Зарегистрирован: Пт сен 01, 2006 10:53
Откуда: Санкт-Петербург

Сообщение DeathStalker »

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

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

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

Maximus
Большое спасибо!
Гугль - это Матрица, чем меньше его спрашивать, тем слабее будут машины во время Великой Битвы
TC10.00b6 x86 Windows 10 x64 (Windows 7 x64)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение 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, дописанными в конец имени перед расширением.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Ответить