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

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

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

Ответить
carlsonn
Сообщения: 11
Зарегистрирован: Вс ноя 04, 2007 15:36

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

Сообщение carlsonn »

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

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

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

Все возможные предложения приветствуются!!! Спасибо!
DrShark
Сообщения: 911
Зарегистрирован: Сб окт 21, 2006 20:27
Откуда: Kyiv, Ukraine
Контактная информация:

Сообщение DrShark »

- указание директории, куда будут генерироваться файлы/папки;
- создание по маске, тобеж задаем общее для всех имя (файла/папки) и в конце/начале (либо другие вариации) подставляем число/букву с интервалом "от" и "до". В результате: Папка1, Папка2, ...., Папка999.
- также создание числового имени файлов/папок. "от" и "до", при этом можно задавать шаг, тобеж делать имена вида: 00001.txt, 00002.txt и так далее;
- создание папок/файлов по списку из указанного файла;
- возможность вписать любое расширение для создаваемого файла;
- + можно сразу предусмотреть вставку текста/кода в создаваемые файлы (например пригодится для вебмастеров);
- также можно предусмотреть создание рандомных имен (числовых, буквенных или микст);
- также можно внедрить и другие алгоритмы, которые обсуждались уже - создание с подкаталогами и т.д.
С этоими задачами справится любой скриптовый язык програмирования. Тот же VBScript.
Имхо можно использовать макросы, типа {name}, {N}, {ext}
Для уже созданных папок/файлов можно использовать инструмент группового переименования, в котором всё это есть.
Единственное, что можно добавить a TC, это поле для вставки количества копий файла/папки. Это тоже реализуется скриптом, ко в тотале уже есть преднастройки для автоматического переименования и т.д., так что это поле лишним небыло бы.
carlsonn
Сообщения: 11
Зарегистрирован: Вс ноя 04, 2007 15:36

Сообщение carlsonn »

DrShark писал(а): С этоими задачами справится любой скриптовый язык програмирования. Тот же VBScript.
В том, что, с этими задачами справится любой язык я и не сомневался.
Дело ведь в том, чтобы все это было реализовано в одном месте.

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

Плюс, большинство пользователей (в т.ч. и я) имеют весьма поверхностное представление о всех этих тонкостях, но работать нормально ведь всем хочется. Поэтому они и обращаются за помощью к специалистам.
Bishop
Сообщения: 98
Зарегистрирован: Вт май 15, 2007 11:09

Сообщение Bishop »

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

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

for ($i = 1; $i -le 10; $i++){New-Item -type file -name "Файл$i.txt"}
или

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

foreach($n in 1..10){New-Item -type directory -name "Папка$n"}
создание папок/файлов по списку из указанного файла;

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

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

PowerShell — штука очень простая и очень полезная — рекомендую.
Написание для таких целей чего-то самостоятельного, как минимум, не интересно.
carlsonn
Сообщения: 11
Зарегистрирован: Вс ноя 04, 2007 15:36

Сообщение carlsonn »

2 Bishop

Конечно спасибо Вам за подсказки и за линку.
Для изучения всего этого теперь нужно иметь время, которого к сожалению нет :(
Но целью этого отпика было все же получить работающую софтинку.
Жаль что никто не откликнулся.
Спасибо!
Bishop
Сообщения: 98
Зарегистрирован: Вт май 15, 2007 11:09

Сообщение Bishop »

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

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

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

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

[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 
		}
	}
}
Кнопка:

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

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 писал(а):- создание папок/файлов по списку из указанного файла;
Файл CreateFileSystemObjectsFromList.ps1

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

[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 
		}
	}
}
Файл с именами содержит одно имя в строке. Существование файлов проверяется.
Кнопка:

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

TOTALCMD#BAR#DATA
powershell -noprofile -command E:\.bishop\pscr\CreateFileSystemObjectsFromList.ps1

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

-1
carlsonn писал(а):- указание директории, куда будут генерироваться файлы/папки;
Файлы/папки будут создаваться в текущем каталоге, т.е. в том, который прописан в "Путь запуска" в параметрах кнопки TC.

Если путь завершается обратным слешом "", это папка, иначе файл.
В кнопках пути к скриптам нужно исправить на свои.
Ответить