Запустить программу в foreach - PullRequest
27 голосов
/ 08 октября 2008

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

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

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

Ответы [ 4 ]

44 голосов
/ 08 октября 2008

Если вам все еще нужны кавычки вокруг пути команды (скажем, если у вас есть пробелы), просто сделайте это так:

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

Обратите внимание на использование & перед строкой, чтобы заставить PowerShell интерпретировать ее как команду, а не строку.

33 голосов
/ 08 октября 2008
ls | %{C:\Working\tools\custom-tool.exe $_}

Когда каждый объект спускается по конвейеру, инструмент запускается против него. Помещение кавычек вокруг командной строки приводит к тому, что это ... жало! Локальная переменная "$ _", вероятно, не знает, что делать, поэтому выдает ошибку.

6 голосов
/ 08 октября 2008

Бьюсь об заклад, вашему инструменту нужен полный путь. $ _ - это каждый файловый объект, который проходит через конвейер. Скорее всего, вам нужно использовать такое выражение:

ls | %{C:\Working\tools\custom-tool.exe $_.fullname}
2 голосов
/ 09 октября 2008

Джеффри Хикс и Слипсек верны. Снять двойные кавычки.

$ _ или $ _. Fullname работали в моем тестовом скрипте (ниже). YMMV с вашим пользовательским инструментом.

gci | % { c:\windows\notepad.exe $_.fullname }

или

gci | % { c:\windows\notepad.exe $_ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...