gpt4 book ai didi

powershell - 为每个包含子文件夹的文件夹运行 powershell 脚本

转载 作者:行者123 更新时间:2023-12-02 22:36:03 25 4
gpt4 key购买 nike

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

有没有更有效的方法来针对目录中每个文件夹的内容运行脚本,一次一个文件夹?

$pdfFolder = 'C:\path\to\folders\here'
$Completed = Get-ChildItem $pdfFolder -Recurse

ForEach-Object ($Completed){
Invoke-Expression -Command "C:\path\where\scriptis\script.ps1"
}`

最佳答案

$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 ,如上图。

关于powershell - 为每个包含子文件夹的文件夹运行 powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53886524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com