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 

Single Post  Topic: Пакетное создание папок или файлов 
Author Message
Bishop



PostPosted: 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.

Если путь завершается обратным слешом "\", это папка, иначе файл.
В кнопках пути к скриптам нужно исправить на свои.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group