Подтвердить что ты не робот

Запуск программы в foreach

Я пытаюсь заставить этот простой Powershell script работать, но я думаю, что что-то принципиально неверно; -)

ls | foreach { "C:\Working\tools\custom-tool.exe" $_ }

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

4b9b3361

Ответ 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 $_ }