Bishop
|
Posted: Fri Nov 16, 2007 15:04 Post subject: |
|
|
Написал парочку скриптов для 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.
Если путь завершается обратным слешом "\", это папка, иначе файл.
В кнопках пути к скриптам нужно исправить на свои. |
|