Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 30.10.2019
Сообщений: 59

Обход ограничения Windows на 15 файлов

03.09.2025, 19:46. Показов 2452. Ответов 17

Студворк — интернет-сервис помощи студентам
Всем привет, по кускам собрал код, который обрабатывает множество файлов, собирая из них информацию в таблицу в Ворде. Скомпилировал в .exe, пока тестил на рабочем столе - переварило любое количество файлов, но когда поместил в меню ПКМ через реестр, столкнулся с ограничением в 15 файлов. Как это обойти внутри кода?

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
param(
    [Parameter(ValueFromRemainingArguments)]
    [string[]] $files
)
$totalFileCount = $files.Count 
$targetFolderPath = Split-Path -Parent $files[0]
$word = New-Object -ComObject Word.Application
$word.Visible = $true
$doc = $word.Documents.Add() 
$table = $doc.Tables.Add($doc.Range(), 2, 2)
$doc.ActiveWindow.View.Zoom.Percentage = 60
Start-Sleep -Milliseconds 500
$table1 = $doc.Tables(1)
 
foreach ($file in $files) {
 
    $fileName = [System.IO.Path]::GetFileName($file)
    
    $fileSize = (Get-Item $file).length | ForEach-Object { "{0:N0}" -f $_ }
 
    $lastModified = (Get-Item $file).LastWriteTime.ToString('dd.MM.yyyy_HH:mm')
 
    $lastDate = (Get-Item $file).LastWriteTime.ToString('dd.MM.yyyy')
 
    $rowNumber = [array]::IndexOf($files, $file) + 2
    $currentRow = $table1.Rows.Item($rowNumber)
    $currentRow.Cells.Item(1).Range.Text = $fileName
    # Start-Sleep -Milliseconds 100
    $currentRow.Cells.Item(2).Range.Text = $fileSize
}
Write-Host "Готово"
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2025, 19:46
Ответы с готовыми решениями:

Рекурсивный обход. Не могу сделать табуляцию. Обход с выводом имен файлов
Задание простое, ну по крайней мере на первый взгляд. Написать скрипт обхода вложенных директорий с...

Обход NAT провайдера с Windows Server 2012 R2 (и VPN?)
Есть у меня друг, которому не даёт житья провайдер на букву М (несколько я знаю, у него GPON),...

Windows server 2012 ограничение доступа к файловому хранилищу
Доброго времени суток коллеги! Возник вопрос. Есть сервер который используется как файловое...

17
 Аватар для volodin661
6686 / 2278 / 347
Регистрация: 10.12.2013
Сообщений: 7,873
03.09.2025, 21:11
микрософт уинуорд отлично открывает html с таблицами.

my.css
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
table {
    border-collapse: collapse; /* Ensures borders are collapsed into a single line */
    width: 100%; /* Optional: Adjust table width */
}
 
th, td {
    border: 1px solid #ccc; /* Thin, light gray border */
    padding: 8px; /* Optional: Add padding to cells */
    text-align: left; /* Optional: Align text within cells */
}
 
th {
    background-color: #f2f2f2; /* Optional: Header background color */
}

PowerShell
1
2
get-item 1.txt, 2.txt | ConvertTo-Html -As Table  -Property Name, Length, LastWriteTime  -CssURI my.css | out-file files.html
winword files.html
1
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,405
Записей в блоге: 14
03.09.2025, 22:07
Цитата Сообщение от Vsenikizanyati Посмотреть сообщение
Как это обойти внутри кода?
А оно не в длине командной строки ~260?
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
05.09.2025, 08:22
Наверное в любом случае будут какие либо ограничения по длине если нужно вводить список файлов параметром, то думаю это можно сделать при помощи конфигурационного файла

powershell data file например.

about_Data_Files

PowerShell
1
2
3
4
5
6
7
8
9
10
@{
    files = @(
        "file1.txt",
        "file2.txt",
        "file3.txt",
        "file4.txt",
        "file5.txt",
        "file6.txt"    
    )
}
PowerShell
1
2
3
4
5
6
7
param(
    [string]$configFilename = "config.psd1"
)
 
$conf = Import-PowerShellDataFile $configFilename
 
$conf.files
1
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
05.09.2025, 13:23
Цитата Сообщение от Rius Посмотреть сообщение
А оно не в длине командной строки ~260?
Здесь, видимо, имеется в виду одновременное (выделить-ПКМ-открыть) открытие файлов по ПКМ, там, действительно есть ограничение на 15 файлов... вроде бы даже есть какие-то способы обхода этого ограничения... вот, только к powershell это имеет отношение - совсем никакое.
1
 Аватар для volodin661
6686 / 2278 / 347
Регистрация: 10.12.2013
Сообщений: 7,873
05.09.2025, 13:33
Цитата Сообщение от YuS_2 Посмотреть сообщение
вроде бы даже есть какие-то способы обхода этого ограничения.
Предполагаю, имеется в виду возня с Windows Explorer; тогда им файлы скопировать,
а powershell-ом Get-Clipboard вытащить.
Вот только в 7.x опции вытаскивать файлы из клипбоарда нет, есть онли ин 5.1
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
05.09.2025, 14:27
Цитата Сообщение от volodin661 Посмотреть сообщение
Вот только в 7.x опции вытаскивать файлы из клипбоарда нет, есть онли ин 5.1
ну, есть же другие способы:
PowerShell
1
2
add-type -ass presentationcore
[windows.clipboard]::getfiledroplist()
1
 Аватар для Storm Screamer
4849 / 1415 / 116
Регистрация: 21.04.2013
Сообщений: 8,598
05.09.2025, 15:42
Цитата Сообщение от Vsenikizanyati Посмотреть сообщение
когда поместил в меню ПКМ через реестр, столкнулся с ограничением в 15 файлов.
Windows обрезает список файлов, передаваемых через реестр, если общий размер строки превышает 8191 символ. Для большинства путей это происходит примерно на 15-м файле (зависит от длины путей).

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
param(
    [Parameter(ValueFromRemainingArguments)]
    [string[]] $files
)
 
# === КОД ДЛЯ ОБХОДА ОГРАНИЧЕНИЯ В 15 ФАЙЛОВ ===
if ($files.Count -eq 15) {
    try {
        $shell = New-Object -ComObject Shell.Application
        $explorerWindows = $shell.Windows()
        
        $newFiles = @()
        foreach ($window in $explorerWindows) {
            if ($window.LocationName -and $window.HWND) {
                $selectedItems = $window.Document.SelectedItems()
                foreach ($item in $selectedItems) {
                    if (-not $item.IsFolder) {
                        $newFiles += $item.Path
                    }
                }
                if ($newFiles.Count -gt 15) {
                    $files = $newFiles
                    break
                }
            }
        }
    }
    catch {
        Write-Warning "Не удалось получить полный список файлов через проводник."
    }
}
 
if ($files.Count -eq 0) {
    Write-Host "Нет файлов для обработки."
    exit
}
# ===========================================
 
$totalFileCount = $files.Count 
$targetFolderPath = Split-Path -Parent $files[0]
$word = New-Object -ComObject Word.Application
$word.Visible = $true
$doc = $word.Documents.Add() 
$table = $doc.Tables.Add($doc.Range(), $totalFileCount + 1, 2) # Исправлено: +1 для заголовка
$doc.ActiveWindow.View.Zoom.Percentage = 60
Start-Sleep -Milliseconds 500
$table1 = $doc.Tables(1)
 
# Заголовки таблицы
$table1.Rows.Item(1).Cells.Item(1).Range.Text = "Имя файла"
$table1.Rows.Item(1).Cells.Item(2).Range.Text = "Размер"
 
foreach ($file in $files) {
    $fileName = [System.IO.Path]::GetFileName($file)
    $fileSize = (Get-Item $file).length | ForEach-Object { "{0:N0}" -f $_ }
    $rowNumber = [array]::IndexOf($files, $file) + 2
    $currentRow = $table1.Rows.Item($rowNumber)
    $currentRow.Cells.Item(1).Range.Text = $fileName
    $currentRow.Cells.Item(2).Range.Text = $fileSize
}
 
Write-Host "Готово. Обработано файлов: $totalFileCount"
1
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 689
05.09.2025, 17:37
Цитата Сообщение от volodin661 Посмотреть сообщение
Вот только в 7.x опции вытаскивать файлы из клипбоарда нет
Попробовал, правда с линуксовым Thunar, Get-Clipboard вернул список файлов с полными путями.
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
05.09.2025, 18:21
Цитата Сообщение от lesser Посмотреть сообщение
правда с линуксовым Thunar, Get-Clipboard вернул список файлов с полными путями.
на окнах индейская хижина, а не список файлов возвращается
0
6977 / 2869 / 1102
Регистрация: 06.06.2017
Сообщений: 9,747
07.09.2025, 09:35
Цитата Сообщение от Storm Screamer Посмотреть сообщение
# === КОД ДЛЯ ОБХОДА ОГРАНИЧЕНИЯ В 15 ФАЙЛОВ ===
Способ обработки выделенных в проводнике элементов списка известен, но как это может работать
Цитата Сообщение от Vsenikizanyati Посмотреть сообщение
в меню ПКМ через реестр
, если для каждого элемента требуется отдельный вызов? Такое применимо только для кнопки или хоткея с ярлыка.

Для этих дел (помимо кучи прочих) давно изобретены файлменеджеры с адекватной параметризацией, но люди и по сей день продолжают мучать безбожный проводник...
1
2 / 2 / 0
Регистрация: 30.10.2019
Сообщений: 59
08.09.2025, 19:32  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Здесь, видимо, имеется в виду одновременное (выделить-ПКМ-открыть) открытие файлов по ПКМ
да, именно так и задумывалось

Добавлено через 3 минуты
Цитата Сообщение от FlasherX Посмотреть сообщение
безбожный проводник...
таков путь) это на рабочем месте, там без вариантов...

Добавлено через 14 минут
попробовал ваш код, к сожалению при выделении больше 15 файлов проводник просто скрывает это приложение в меню ПКМ
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
08.09.2025, 23:14
Цитата Сообщение от Vsenikizanyati Посмотреть сообщение
да, именно так и задумывалось
обход этого ограничения решается внесением в реестр параметра:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
Name : MultipleInvokePromptMinimum
Type : DWORD
Только вот, так и не понял: при чем тут powershell?
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
09.09.2025, 11:01
кстати, это есть в официальных источниках, например, здесь
1
 Аватар для volodin661
6686 / 2278 / 347
Регистрация: 10.12.2013
Сообщений: 7,873
09.09.2025, 11:48
напрашивающееся решение получения списка файлов без недельного обсуждения проблемы ⑮ негритят -
скопировать в Clipboard.
Предварительно устанавливается Clipboard Listener ( через P/Invoke AddClipboardFormatListener ), который
запускает процедуру сохранения полученного списка файлов в нужном формате ( самое разумное - HTML ).

Всё.
Дел на 10 минут - язык реализации C# + запрос ко вселенскому разуму.
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
09.09.2025, 13:35
Цитата Сообщение от volodin661 Посмотреть сообщение
напрашивающееся решение получения списка файлов без недельного обсуждения проблемы
Да пока непонятно, в чем именно проблема...
Если в:
Цитата Сообщение от volodin661 Посмотреть сообщение
⑮ негритят -
скопировать в Clipboard.
Это пока, всё что понятно и ясно.

Цитата Сообщение от volodin661 Посмотреть сообщение
Предварительно устанавливается Clipboard Listener
- а вот это зачем?
Вот же 7 - всё делается в самом PS, без привлечения лишних сущностей... и без ограничений на количество.
А далее, уже использовать список файлов как требуется... естественно, при помощи powershell, раз уж это здесь обсуждается.

Но просили-то способы обхода ограничения в 15 файлов, а powershell таких ограничений не имеет... вроде бы... в общем, описание проблемы надо бы уточнить.
0
 Аватар для volodin661
6686 / 2278 / 347
Регистрация: 10.12.2013
Сообщений: 7,873
09.09.2025, 13:55
Цитата Сообщение от YuS_2 Посмотреть сообщение
Сообщение от volodin661 Предварительно устанавливается Clipboard Listener- а вот это зачем?
Минимизация телодвижений; Попадание в clipboard списка файлов из любого источника вызывает аутоматичное создание предопределённого файла.
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 573
16.09.2025, 13:07
Цитата Сообщение от volodin661 Посмотреть сообщение
get-item 1.txt, 2.txt | ConvertTo-Html -As Table  -Property Name, Length, LastWriteTime  -CssURI my.css | out-file files.html
....
Скорее всего этот вариант с файлом.css не взлетит. Без доп.переменной и RAW
PowerShell
1
2
3
4
$ExternalFile = GC GetText.css -RAW
$Style = ("<style>`n") + $ExternalFile + ("`n</style>")
GI 02.txt, 03.txt, 04.txt, AllChangePassword04.txt | ConvertTo-Html -Title "ListTXT" -Head $style -As Table -Property Name, Length, LastWriteTime | out-file files.html
II files.html
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
body {
    background-color: rgb(196, 233, 158);
}
table {
    border-collapse: collapse; /* Ensures borders are collapsed into a single line */
    width: 100%; /* Optional: Adjust table width */
}
 
th, td {
    border: 3px solid #70da2a; /* Thin, light gray border */
    padding: 8px; /* Optional: Add padding to cells */
    text-align: center; /* Optional: Align text within cells */
}
 
th {
    background-color: #7855ca; /* Optional: Header background color */
}
Что-то близкое схватит файл.css
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.09.2025, 13:07
Помогаю со студенческими работами здесь

Ограничение канала на Windows XP Pro SP2
Доброе время суток. Хочу ограничить канал на доступ в инет. Инет раздается через комп-шлюз. Можно...

Ограничение пользователей на установку ПО в Windows XP Home Edition
Здравствуйте, дорогие коллеги! Недавно поставил виртуальную машину Windows XP Home Edition SP2....

Как поставить ограничение использование программ пользователям в windows server 2003
как поставить ограничение использование программ пользователям в windows server 2003 если...

Windows server 2003 ограничение IP
Как можно ограничить доступ к серверу? Не использую Маршрутизацию и удаленный доступ.

Ограничение доступа к удаленным рабочим столам в Windows Server 2003/2008
Как можно (помимо брандмауэра) запретить подключения к удаленному рабочему столу (mstsc) на сервер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru