Как я могу получить рекурсивное имя каталога с Powershell? - PullRequest
4 голосов
/ 31 марта 2011

Я пытаюсь использовать Powershell для автоматизации сборок проектов с использованием компилятора / компоновщика cli. Я хочу поместить сценарий в корневой каталог проекта и сделать так, чтобы он проверял все исходные файлы рекурсивно и компилировал их, а выходные данные компилятора указывали на тот же каталог, что и исходные файлы. Я также хотел бы собрать список * .c в виде переменной с разделителями-запятыми в качестве входных данных для компоновщика. Это типичная ситуация:

//projects/build_script.ps
//projects/proj_a/ (contains a bunch of source files)
//projects/proj_b/ (contains a bunch of source files)

Я хочу отсканировать все подкаталоги и скомпилировать исходные файлы для каждого * .c файла. Это то, что я до сих пор:

$compilerLocation = "C:\Program Files (x86)\HI-TECH Software\PICC-18\PRO\9.63\bin\picc18.exe";
$args = "--runtime=default,+clear,+init,-keep";
$Dir = get-childitem C:\projects -recurse
$List = $Dir | where {$_.extension -eq ".c"}
$List | $compilerLocation + "-pass" + $_ + $args + "-output=" + $_.current-directory;

Я понимаю, что $ _. Current-directory не является реальным членом, и у меня, вероятно, есть другие проблемы с синтаксисом. Я прошу прощения за неопределенность моего вопроса, я более чем готов объяснить, что может показаться неясным.

1 Ответ

7 голосов
/ 31 марта 2011

Простите, если я не понимаю ваших точных требований.Ниже приведен пример рекурсивного получения всех файлов с расширением .txt, а затем перечисления имени файла и имени каталога, в котором он находится.Чтобы получить это, я получаю доступ к значению свойства DirectoryName объекта FileInfo.См. FileInfo документацию для получения дополнительной информации.

$x = Get-ChildItem . -Recurse -Include "*.txt"
$x | ForEach-Object {Write-Host "FileName: $($_.Name) `nDirectory: $($_.DirectoryName)"}

Чтобы нанести удар по вашему текущему коду:

$compilerLocation = "C:\Program Files (x86)\HI-TECH Software\PICC-18\PRO\9.63\bin\picc18.exe";
$args = "--runtime=default,+clear,+init,-keep";
$List = Get-ChildItem C:\project -Recurse -Include *.c
$List | ForEach-Object{#Call your commands for each fileinfo object}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...