Как запустить файл .bat для запуска отдельно от Powershell (pt1 из проблемы 2pt) - PullRequest
0 голосов
/ 14 мая 2019

У меня есть файл .bat, который будет находиться в папке и открывать все файлы с определенным расширением при двойном щелчке (в данном случае 3dsMax).

Я хочу создать графический интерфейс для PowerShell (или, возможно, Python), который при открытии я могу вставить местоположение файла и иметь кнопку, которая запускает файл .bat в этом месте.

Я пробовал много разных кодов, которые я нашел здесь и на других сайтах, таких как:

import subprocess
subprocess.call.......

import subprocess
subprocess.Popen.......

os.system.....

Start-Process....

Даже просто расположение файла .bat.

Самое близкое, что у меня есть, - это запустить файл .bat, но он открывает файл 3dsmax, проходящий через весь процесс загрузки в Powershell или CMD. Затем 3dsmax пытается открыть пользовательский интерфейс, и я получаю 400+ версий max, которые пытаются открыть, и происходит сбой. (Изменить - 400+ версий только одного файла, который он пытается открыть).

Я не хочу изменять файл .bat, так как он работает хорошо и делает больше, чем просто открывает файл .max. Мне просто нужно, чтобы открыть файл обычно вне CMD или любой оболочки.

Заранее спасибо

(Редактировать) .bat код файла ниже ..

for /r %%v in (*.max) do (
  start "" "C:\Program Files\Autodesk\3ds Max 2018\3dsmax.exe" -u MAXScript Wire_colorizer_0.ms %%v 
)

1 Ответ

0 голосов
/ 14 мая 2019

Я не знаю, зачем вам решение с полями A и B, но вы идете:

function startBAT() {
    $STARTButton.Enabled = $false #disable START button, so u won't accidentally run it again while executing
    Set-Location "C:\something\$($TextBox.text)\$($TextBox2.text)" #textbox.text = field A, textbox2.text = field B
    Start-Process "C:\something\$($TextBox.text)\$($TextBox2.text)\name.bat"
    $STARTButton.Enabled = $true #enable START button after done
    $form.Close() #close GUI immediately after execution, delete this line if you dont want to
}

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

$Form = New-Object system.Windows.Forms.Form
$Form.ClientSize = '500,230'
$Form.text = "Lunch .bat file from location"
$Form.TopMost = $false
$Form.StartPosition = 'CenterScreen'
$Form.FormBorderStyle = 'Fixed3D'
$Form.MaximizeBox = $false

$Label = New-Object system.Windows.Forms.Label
$Label.text = "Field A:"
$Label.AutoSize = $true
$Label.location = New-Object System.Drawing.Point(50,30)
$Label.size = New-Object System.Drawing.Size(50,50)
$Label.Font = 'Microsoft Sans Serif,10'

$TextBox = New-Object system.Windows.Forms.TextBox
$TextBox.multiline = $false
$TextBox.location = New-Object System.Drawing.Point(50,50)
$TextBox.size = New-Object System.Drawing.Size(400,50)
$TextBox.Font = 'Microsoft Sans Serif,10'

$Label2 = New-Object system.Windows.Forms.Label
$Label2.text = "Field B:"
$Label2.AutoSize = $true
$Label2.location = New-Object System.Drawing.Point(50,90)
$Label2.size = New-Object System.Drawing.Size(50,80)
$Label2.Font = 'Microsoft Sans Serif,10'

$TextBox2 = New-Object system.Windows.Forms.TextBox
$TextBox2.multiline = $false
$TextBox2.location = New-Object System.Drawing.Point(50,110)
$TextBox2.size = New-Object System.Drawing.Size(400,50)
$TextBox2.Font = 'Microsoft Sans Serif,10'

$STARTButton = New-Object System.Windows.Forms.Button
$STARTButton.Location = New-Object System.Drawing.Point(200,150)
$STARTButton.Size = New-Object System.Drawing.Size(100,50)
$STARTButton.Text = 'START'
$STARTButton.Add_Click({startBAT}) 

$Form.controls.AddRange(@($Label, $TextBox,$Label2, $TextBox2, $STARTButton))

$Form.ShowDialog()

Также в вашем пакетном сценарии вы используете параметр /r, поэтому он будет работатькаждый файл во введенном пути и его подпапках.Если вы хотите запустить его только для файлов с указанным путем к папке (без вложенных папок), просто удалите /r из сценария .bat.

...