如何使用PowerShell检索递归目录名称?

4

我正在尝试使用Powershell自动化构建项目,使用命令行编译器/链接器。我想将脚本放在项目的根目录中,并递归检查所有源文件并进行编译,编译器输出指向与源文件相同的目录。我还希望收集*.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
你在用PostScript编写构建脚本?真是硬核...;-) - Joey
1个回答

7

如果我没有理解您的确切要求,请原谅。以下是一个递归获取所有扩展名为.txt的文件,并列出文件名和包含目录名称的示例。为了获得此信息,我访问FileInfo对象上的DirectoryName属性值。有关更多信息,请参见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}

这与我的兴趣相关 :) 感谢您的快速回复。 - Nate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接