Запуск скрипта в PowerShell в передачей аргументов из cmd файла

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Ответить
falconi
Сообщения: 2
Зарегистрирован: 11 окт 2017, 17:46

11 окт 2017, 18:10

Доброго дня!

Опыта в программировании нет. Поэтому сразу прошу прощения за все ляпы и ересь...

Стоит задача: запустить скриптом Excel, открыть определенный документ и выполнить макрос.
Я сделал это как cмог в PowerShell.
Но запускать этот скрипт нужно из программы, которая не дружит с PowerShell, а соответственно запускаю из этой программы cmd-файл, следующего содержания:

Код: Выделить всё

powershell -ExecutionPolicy bypass -File C:\Script\NEW_Sticker_2.ps1
И далее выполняется сам NEW_Sticker_2.ps1:

Код: Выделить всё

$excel = new-object -comobject excel.application
$xlprocess = Get-Process excel 
$excel.Visible = $False
$excel.DisplayAlerts = $False
$excelFiles = Get-ChildItem -Path C:\workfiles\ -Include *.xls, *.xlsx -Recurse
Foreach($file in $excelFiles)
{
$workbook = $excel.workbooks.open($file.fullname)
$worksheet = $workbook.worksheets.item(1)
$excel.Run("Personal.xlsb!Export")
}
$workbook.Close()
$excel.Quit()
$xlprocess | kill[/B]
Все работает, но только с постоянно прописанным путём к обрабатываемому файлу (C:\workfiles\).

Пожалуйста, помогите.
Можно ли из первого cmd-файла как-нибудь передать параметром путь к обрабатываемому файлу, который каждый раз меняется?
Первому файлу этот параметр (путь) может сообщить запускающая его программа как параметр...

Или может я вообще левой рукой правое ухо чешу?
И можно все прощу сделать...
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

11 окт 2017, 19:34

Да можно. Вот так:

Код: Выделить всё

powershell -ExecutionPolicy bypass -File C:\Script\NEW_Sticker_2.ps1 C:\workfiles
Обращаться к параметру внутри PowerShell скрипта можно будет через $args[0].

P.S. А что помешало нагуглить данный вопрос? Я сам не знаю PowerShell совсем, но гугл сразу подсказал куда мне идти и что читать.

P.P.S. Раздел неправильно выбран. Shell и PowerShell - вещи абсолютно разные.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
falconi
Сообщения: 2
Зарегистрирован: 11 окт 2017, 17:46

11 окт 2017, 20:57

Romeo, спасибо!

Гуглил, пробовал этот метод, но только отправляя аргумент(путь) из программы в cmd-файл. И он не работал.
Сейчас попробовал сразу задать путь в cmd-файле. все работает.
Значит проблема в передаче аргумента...
Ответить