使用PowerShell在每个子目录中运行命令

Svi*_*ish 2 powershell

我想mvn clean compile在包含pom.xml文件的Eclipse工作区中的每个目录中运行.

我能够为svn update包含.svn这样的每个目录运行:

PS C:\workspace> Get-ChildItem -recurse -force | 
where {$_.name -eq ".svn"} | 
foreach {svn update $_.parent.FullName}
Run Code Online (Sandbox Code Playgroud)

但是,这提供svn了当前目录的完整路径并从当前目录运行.在mvn clean compile需要的目录内运行,据我所知.尝试做以下,但后来我只是得到一个错误说不能为空.似乎是cd它抱怨的第一个电话.我只是有一些语法错误,或者我使用foreach错了?

PS C:\workspace> Get-ChildItem -recurse | 
where {$_.name -eq "pom.xml"} | 
foreach { cd $_.parent.name; mvn clean compile; cd ..; }
Run Code Online (Sandbox Code Playgroud)

Svi*_*ish 8

似乎$_.parent.FullName属性在第一种情况下工作,因为我只过滤掉目录.在这种情况下,我过滤掉了文件,所以我通过使用$_.DirectoryName而得到了它.

PS C:\workspace> Get-ChildItem -recurse | 
where {$_.name -eq "pom.xml"} | 
foreach { cd $_.DirectoryName; mvn clean compile; cd ..; }
Run Code Online (Sandbox Code Playgroud)