Преобразование пакетных команд с помощью Powershell, который находит файлы и создает параметры - PullRequest
0 голосов
/ 22 апреля 2020

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

 cmd /r dir /s /b RunnerUnitTest.dll | findstr /r bin\\ > tests_list.txt
 cmd /r for /f %f in (tests_list.txt) do vstest.console.exe "%f"

Первая команда ищет файл, он находит два:

RunnerUnitTest \ bin \ Debug \ RunnerUnitTest.dll

RunnerUnitTest \ obj \ Debug \ RunnerUnitTest.dll

затем это сужает его до единицы (bin в пути) и вставляет в файл:

RunnerUnitTest \ bin \ Debug \ RunnerUnitTest.dll

Вторая строка принимает этот вывод и передает его в исполняемый как параметр.

Это для бегуна gitlab, кстати

1 Ответ

2 голосов
/ 22 апреля 2020

Вы можете сделать что-то подобное без промежуточного файла, так как Get-ChildItem вернет объект FileInfo для файлов и DirectoryInfo объекты для каталогов (оба из которые получены из FileSystemInfo):

Get-ChildItem -Recurse bin\Debug\RunnerUnitTest.dll | Select-Object -First 1 | Foreach-Object {
  vstest.console.exe $_.FullName
}

Для этого будет рекурсивный поиск всех найденных файлов с именем RunnerUnitTest.dll с родительскими папками Debug и bin, и затем для каждого возвращаемого файла (я добавил Select-Object -First 1, чтобы гарантировать, что мы вернем только одну сборку, но это необязательно), передайте полный путь к сборке программе vstest.console.exe.

Путь как написано выше, сборка в папке obj вообще не будет возвращена для рассмотрения выполнения.


Как к сведению, трубопровод с | работает так же, как и с другими оболочками, такими как Bash или cmd, но он поддерживает передачу сложных объектов вместо строк. Как правило, вы можете направить любой вывод в потоке вывода в другие командлеты или сохранить его в переменных. Операторы перенаправления работают аналогично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...