Как выбрать несколько файлов с помощью селектора BATCH? - PullRequest
0 голосов
/ 09 сентября 2018

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

Например: C: \Users\Andrew\Desktop. И, наконец, мне нужна другая переменная, чтобы сохранить расширение выбранных файлов (я предполагаю, что все файлы имеют одинаковое расширение). Пример: в файле File.txt сохраняется txt. Я надеюсь, что вы можете мне помочь.

rem preparation command
set pwshcmd=powershell -noprofile -command "&{[System.Reflection.Assembly]::LoadWithPartialName('System.windows.forms') | Out-Null;$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog; $OpenFileDialog.ShowDialog()|out-null; $OpenFileDialog.FileName}"

rem exec commands powershell and get result in FileName variable
for /f "delims=" %%I in ('%pwshcmd%') do set "FileName=%%I"

echo %FileName%

1 Ответ

0 голосов
/ 09 сентября 2018

Если вы не владеете несколькими языками сценариев, их всегда сложно объединить.

Вам следует разработать свое решение в PowerShell и, если действительно необходимо, обернуть его в пакетном режиме, как только оно заработает должным образом.

OpenFileDialog нужны дополнительные настройки перед вызовом метода .ShowDialog():

$OpenFileDialog.Multiselect = $true
$OpenFileDialog.Filter = 'TXT (*.txt)| *.txt'
$OpenFileDialog.InitialDirectory = [Environment]::GetFolderPath('Desktop')

Также результат Multiselect возвращается в свойстве FileNames, обратите внимание на множественное число.

Вся часть PowerShell с коротким именем переменной $OFD

[System.Reflection.Assembly]::LoadWithPartialName('System.windows.forms')|Out-Null
$OFD = New-Object System.Windows.Forms.OpenFileDialog
$OFD.Multiselect = $True
$OFD.Filter = 'TXT (*.txt)| *.txt'
$OFD.InitialDirectory = [Environment]::GetFolderPath('Desktop')
$OFD.ShowDialog()|out-null
$OFD.FileNames

Как подсказал Аасини, используйте переменную массива для получения имен файлов в пакете

:: Q:\Test\2018\09\09\SO_52240766.cmd
@Echo off & Setlocal EnableDelayedExpansion
rem preparation command
set pwshcmd=powershell -NoP -C "[System.Reflection.Assembly]::LoadWithPartialName('System.windows.forms')|Out-Null;$OFD = New-Object System.Windows.Forms.OpenFileDialog;$OFD.Multiselect = $True;$OFD.Filter = 'TXT (*.txt)| *.txt';$OFD.InitialDirectory = [Environment]::GetFolderPath('Desktop');$OFD.ShowDialog()|out-null;$OFD.FileNames"

rem exec commands powershell and get result in FileName variable
Set i=0
for /f "delims=" %%I in ('%pwshcmd%') do (
    Set /A i+=1
    set "FileName[!i!]=%%I"
)
If %i% gtr 0 (
    Echo %i% files selected
    Set FileName
) else (
    Echo no files selected
)

Пример вывода

15:39:24 Q:\Test\2018\09\09________________________________________
> SO_52240766.cmd
2 files selected
FileName[1]=C:\Users\LotPings\Desktop\Dokument1.txt
FileName[2]=C:\Users\LotPings\Desktop\espressif-MAC1.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...