Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Пакетное создание папок или файлов

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
carlsonn



Joined: 04 Nov 2007
Posts: 11

Post (Separately) Posted: Sun Nov 04, 2007 17:34    Post subject: Пакетное создание папок или файлов Reply with quote

Заранее прошу прощения, за поднятие уже обговариваемой темы, но все же, есть некоторые предложения, а точнее просьба.
Ув. модераторы, просьба перенести топик в нужный раздел, если посчитаете нужным Smile

Собственно... Часто возникает необходимость в создании большого количества папок или файлов, само собой, просто так, вручную, это сделать довольно сложно, приходится прибегать к разному виду программ, которых, кстати, не так уж много, а точнее можно пересчитать по пальцам, но все они не в полной мере выполняют необходимые функции. Поэтому есть необходимость в создании такого скрипта, а лучше это будет смотреться в плагине.

Так вот, было бы неплохо иметь плагин/скрипт для пакетного создания файлов/папок с выполнением некоторых условий:

    - указание директории, куда будут генерироваться файлы/папки;
    - создание по маске, тобеж задаем общее для всех имя (файла/папки) и в конце/начале (либо другие вариации) подставляем число/букву с интервалом "от" и "до". В результате: Папка1, Папка2, ...., Папка999.
    - также создание числового имени файлов/папок. "от" и "до", при этом можно задавать шаг, тобеж делать имена вида: 00001.txt, 00002.txt и так далее;
    - создание папок/файлов по списку из указанного файла;
    - возможность вписать любое расширение для создаваемого файла;
    - + можно сразу предусмотреть вставку текста/кода в создаваемые файлы (например пригодится для вебмастеров);
    - также можно предусмотреть создание рандомных имен (числовых, буквенных или микст);
    - также можно внедрить и другие алгоритмы, которые обсуждались уже - создание с подкаталогами и т.д.


Имхо можно использовать макросы, типа {name}, {N}, {ext}.
Ну пока идеи закончились. Думаю такая фича пригодится многим и вы останетесь довольны своим детищем, ну и мы тоже Smile

Все возможные предложения приветствуются!!! Спасибо!
Back to top
View user's profile Send private message
DrShark



Joined: 21 Oct 2006
Posts: 911
Location: Kyiv, Ukraine

Post (Separately) Posted: Sun Nov 04, 2007 20:12    Post subject: Reply with quote

Quote:
- указание директории, куда будут генерироваться файлы/папки;
- создание по маске, тобеж задаем общее для всех имя (файла/папки) и в конце/начале (либо другие вариации) подставляем число/букву с интервалом "от" и "до". В результате: Папка1, Папка2, ...., Папка999.
- также создание числового имени файлов/папок. "от" и "до", при этом можно задавать шаг, тобеж делать имена вида: 00001.txt, 00002.txt и так далее;
- создание папок/файлов по списку из указанного файла;
- возможность вписать любое расширение для создаваемого файла;
- + можно сразу предусмотреть вставку текста/кода в создаваемые файлы (например пригодится для вебмастеров);
- также можно предусмотреть создание рандомных имен (числовых, буквенных или микст);
- также можно внедрить и другие алгоритмы, которые обсуждались уже - создание с подкаталогами и т.д.

С этоими задачами справится любой скриптовый язык програмирования. Тот же VBScript.
Quote:
Имхо можно использовать макросы, типа {name}, {N}, {ext}
Для уже созданных папок/файлов можно использовать инструмент группового переименования, в котором всё это есть.
Единственное, что можно добавить a TC, это поле для вставки количества копий файла/папки. Это тоже реализуется скриптом, ко в тотале уже есть преднастройки для автоматического переименования и т.д., так что это поле лишним небыло бы.
Back to top
View user's profile Send private message
carlsonn



Joined: 04 Nov 2007
Posts: 11

Post (Separately) Posted: Sun Nov 04, 2007 23:31    Post subject: Reply with quote

DrShark wrote:

С этоими задачами справится любой скриптовый язык програмирования. Тот же VBScript.


В том, что, с этими задачами справится любой язык я и не сомневался.
Дело ведь в том, чтобы все это было реализовано в одном месте.

Вы же когда идете в кафе, хотите там выпить водочки и закусить, а не бежать в рюмочную за 100-кой, и в магаз за закусью. Ведь не логично же. Сори за такой пример.

Плюс, большинство пользователей (в т.ч. и я) имеют весьма поверхностное представление о всех этих тонкостях, но работать нормально ведь всем хочется. Поэтому они и обращаются за помощью к специалистам.
Back to top
View user's profile Send private message
Bishop



Joined: 15 May 2007
Posts: 98

Post (Separately) Posted: Mon Nov 05, 2007 18:46    Post subject: Reply with quote

carlsonn, Взять PowerShell, разобраться и пользоваться.
Quote:
- создание по маске, тобеж задаем общее для всех имя (файла/папки) и в конце/начале (либо другие вариации) подставляем число/букву с интервалом "от" и "до". В результате: Папка1, Папка2, ...., Папка999.

Например командой:
Code:
for ($i = 1; $i -le 10; $i++){New-Item -type file -name "Файл$i.txt"}
или
Code:
foreach($n in 1..10){New-Item -type directory -name "Папка$n"}

Quote:
создание папок/файлов по списку из указанного файла;
Code:
Get-Content file.txt | ForEach-Object {New-Item $_ -type file -force}
Где file.txt - файл с именами создаваемых файлов по одному в строке.

PowerShell — штука очень простая и очень полезная — рекомендую.
Написание для таких целей чего-то самостоятельного, как минимум, не интересно.
Back to top
View user's profile Send private message
carlsonn



Joined: 04 Nov 2007
Posts: 11

Post (Separately) Posted: Mon Nov 05, 2007 22:31    Post subject: Reply with quote

2 Bishop

Конечно спасибо Вам за подсказки и за линку.
Для изучения всего этого теперь нужно иметь время, которого к сожалению нет Sad
Но целью этого отпика было все же получить работающую софтинку.
Жаль что никто не откликнулся.
Спасибо!
Back to top
View user's profile Send private message
Bishop



Joined: 15 May 2007
Posts: 98

Post (Separately) Posted: Fri Nov 16, 2007 15:04    Post subject: Reply with quote

Написал парочку скриптов для PowerShell.

Разрешить PowerShell-у выполнять скрипты:
Set-ExecutionPolicy RemoteSigned
PS должен быть запущен с правами администратора. В 64-битной Windows нужно выполнить команду в обоих PS (TC будет запускать 32-битный).


carlsonn wrote:
- создание по маске, тобеж задаем общее для всех имя (файла/папки) и в конце/начале (либо другие вариации) подставляем число/букву с интервалом "от" и "до". В результате: Папка1, Папка2, ...., Папка999.
- также создание числового имени файлов/папок. "от" и "до", при этом можно задавать шаг, тобеж делать имена вида: 00001.txt, 00002.txt и так далее;


Файл CreateFileSystemObjectsByMask.ps1
Code:
[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
$form = New-Object System.Windows.Forms.Form
$form.ClientSize = New-Object System.Drawing.Size(410, 90)
$form.MaximizeBox = $false
$form.MinimizeBox = $false
$form.Text = "Create FileSystem Objects"
$form.Font = [System.Drawing.SystemFonts]::MessageBoxFont
$form.FormBorderStyle = "FixedDialog"
$form.Add_Shown({$form.Activate()})

[System.Windows.Forms.Application]::EnableVisualStyles()

$newtb = {New-Object System.Windows.Forms.TextBox}
$newlb = {New-Object System.Windows.Forms.Label}
$newbt = {New-Object System.Windows.Forms.Button}
$size = {New-Object System.Drawing.Size($args[0], $args[1])}
$point = {New-Object System.Drawing.Point($args[0], $args[1])}

# Copyright
$cr = New-Object System.Windows.Forms.LinkLabel
$cr.Location = &$point 10 65
$cr.Size = &$size 100 17
$cr.Text = '© 2007 Bishop'
$cr.Add_Click({[System.Diagnostics.Process]::Start('ma'+'ilt'+'o:'+$cr.Text.Split()[2]+[char]64+'tu'+'t.by')})

# Pattern
$info = &$newlb
$info.Location = &$point 10 10
$info.Size = &$size 220 17
$info.Text = 'Pattern ($c — counter, `$ — $ symbol):'

$txt = &$newtb
$txt.Location = &$point 10 30
$txt.Size = &$size 220 20
$txt.Text = '$c'

# Counter
$infoc = &$newlb
$infoc.Location = &$point 250 10
$infoc.Size = &$size 160 17
$infoc.Text = 'Counter: first; last; inc; width'

$tcb = &$newtb
$tce = &$newtb
$tci = &$newtb
$tcw = &$newtb

$tarr = $tcb, $tce, $tci, $tcw
$tarrt = 1, 10, 1, 0
$l, $w = 250, 40
for ($i = 0; $i -lt $tarr.Length; $i++)
{
   $tarr[$i].Location = &$point $l 30
   $tarr[$i].Size = &$size $w 20
   $l += $w + 10
   if ($i -eq 1) {$w /= 2}
   $tarr[$i].Text = $tarrt[$i]
}

# Command
$btno = &$newbt
$btno.Location = &$point 250 60
$btno.Size = &$size 70 23
$btno.DialogResult = $btno.Text = "OK"

$btnc = &$newbt
$btnc.Location = &$point 330 60
$btnc.Size = &$size 70 23
$btnc.DialogResult = $btnc.Text = "Cancel"

# ToolTip
$tt = New-Object System.Windows.Forms.ToolTip
for ($i = 0; $i -lt 5; $i++)
{
   $tt.SetToolTip(
   @($txt, $tcb, $tce, $tci, $tcw)[$i],
   @("Filename pattern (ends with backslash \ for folders)`nAfter `$c must be separator (comma, space, etc.), else use `$(`$c)", 'First value', 'Last value', 'Increment', 'Width (0 — auto)')[$i])
}

# Adding controls
$form.Controls.AddRange(@($txt, $info, $infoc, $tcb, $tce, $tci, $tcw, $cr, $btno, $btnc))
$form.AcceptButton = $btno
$form.CancelButton = $btnc

if ($form.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK)
{
   $inc = [int] $tci.Text
   $dw  = [int] $tcw.Text
   for ($i = [int] $tcb.Text; $i -le [int] $tce.Text; $i += $inc)
   {
      $c = $i.ToString("d$dw")
      $path = $ExecutionContext.InvokeCommand.ExpandString($txt.Text)
      if ($path.EndsWith("\")) {
         $type = 'directory'
      }
      else {
         $type = 'file'
      }
      if (-not (Test-Path $path)) {
         New-Item -Name $path -type $type -Force
      }
   }
}

Кнопка:
Code:
TOTALCMD#BAR#DATA
powershell -noprofile -command E:\.bishop\pscr\CreateFileSystemObjectsByMask.ps1

wcmicons.dll,44
Create File System Objects By Mask
.

-1

$c — счетчик, но если после него не идёт разделитель (пробел, _, -, и т.д.), используйте запись $($c).
Можно так: $c\folder$c\file$c.ext$c.
Важно:
Проверка корректности вводимых данных не выполняется;
Существование файлов проверяется — не затрутся.


carlsonn wrote:
- создание папок/файлов по списку из указанного файла;

Файл CreateFileSystemObjectsFromList.ps1
Code:
[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.Application]::EnableVisualStyles()
$ofd = New-Object System.Windows.Forms.OpenFileDialog
if ($ofd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK)
{
   $paths = Get-Content $ofd.FileName
   foreach ($path in $paths) {
      if ($path.EndsWith("\")) {
         $type = "directory"
      }
      else {
         $type = "file"
      }
      if (-not (Test-Path $path)) {
         New-Item -Name $path -type $type -Force
      }
   }
}

Файл с именами содержит одно имя в строке. Существование файлов проверяется.
Кнопка:
Code:
TOTALCMD#BAR#DATA
powershell -noprofile -command E:\.bishop\pscr\CreateFileSystemObjectsFromList.ps1

wcmicons.dll,44
Create File System Objects From List
.

-1

carlsonn wrote:
- указание директории, куда будут генерироваться файлы/папки;

Файлы/папки будут создаваться в текущем каталоге, т.е. в том, который прописан в "Путь запуска" в параметрах кнопки TC.

Если путь завершается обратным слешом "\", это папка, иначе файл.
В кнопках пути к скриптам нужно исправить на свои.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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