使用子文件夹为每个文件夹运行powershell脚本

时间:2018-12-21 14:35:26

标签: powershell

我有一些脚本需要针对许多具有相对路径的文件夹运行。我正在尝试使用一个主脚本来解决该问题,该脚本针对该路径中的每个文件夹运行,一次运行一个文件夹。这些文件夹是以下路径中“ here”文件夹的所有子级。我似乎无法正确理解语法,但我想我很接近:)

是否有更有效的方法针对目录中每个文件夹的内容(一次一个文件夹)运行脚本?

public async myMethod(): MyType {
  return await <MyType>this.httpClient.get('/my/url').toPromise();
}

1 个答案:

答案 0 :(得分:4)

$pdfFolder = 'C:\path\to\folders\here'

# Get all subfolders - note the -Directory switch (PSv3+)
$Completed = Get-ChildItem $pdfFolder -Recurse -Directory

# Pipe the subfolders to ForEach-Object, invoke the
# script with & (avoid Invoke-Expression), and pass the subfolder
# at hand as an argument.
$Completed | ForEach-Object {
  & "C:\path\where\scriptis\script.ps1" $_
}

关于您尝试过的事情

  

Get-ChildItem $pdfFolder -Recurse

此命令不仅返回文件夹(目录),而且还返回文件。要将输出限制为文件夹,请通过开关-Directory(PSv3 +)。


  

ForEach-Object ($Completed) { ... }

您将foreach loop的语法与基于管道的ForEach-Object cmdlet的语法相混淆。
该cmdlet期望来自管道的输入,因此必须改为使用
$Completed | ForEach-Object { ... }

还要注意,除非真正需要首先收集数组中的所有子文件夹,否则只需将Get-ChildItem调用直接管道传递到ForEach-Object


  

Invoke-Expression -Command "C:\path\where\scriptis\script.ps1"

Invoke-Expression should be avoided,因为它很少是正确的工具,并且可能会带来安全风险。

要通过脚本引用和/或存储在变量文件路径来调用脚本,只需使用&, the call operator,如图所示以上。