Запуск программы в foreach
Я пытаюсь заставить этот простой Powershell script работать, но я думаю, что что-то принципиально неверно; -)
ls | foreach { "C:\Working\tools\custom-tool.exe" $_ }
Я в основном хочу получить файлы в каталоге и передавать их один за другим в качестве аргументов для настраиваемого инструмента.
Ответы
Ответ 1
ls | %{C:\Working\tools\custom-tool.exe $_}
Поскольку каждый объект спускается по конвейеру, инструмент будет запущен против него. Ввод цитат вокруг командной строки заставляет его... жаловать! Локальная переменная "$ _" тогда, вероятно, не знает, что делать с такими ошибками с ошибкой.
Ответ 2
Если вам все еще нужны кавычки по пути команды (скажем, если у вас есть пробелы), просто сделайте так:
ls | % { &"C:\Working\tools\custom-tool.exe" $_.FullName }
Обратите внимание на использование и перед строкой, чтобы заставить PowerShell интерпретировать ее как команду, а не строку.
Ответ 3
Я уверен, что ваш инструмент нуждается в полном пути. $_ - это каждый файловый объект, проходящий через конвейер. Вероятно, вам нужно использовать следующее выражение:
ls | %{C:\Working\tools\custom-tool.exe $_.fullname}
Ответ 4
И Jeffrery Hicks, и slipsec верны. Уберите двойные кавычки.
$_ или $_. fullname работал в моем тесте script (ниже). YMMV с вашим пользовательским инструментом.
gci | % { c:\windows\notepad.exe $_.fullname }
или
gci | % { c:\windows\notepad.exe $_ }