更快地在文件夹中查找文件

时间:2018-04-04 06:41:10

标签: powershell powershell-v2.0 powershell-v3.0

我正在寻找PowerShell最快和最小的代码来查看包含子文件夹的文件夹以查找app.config文件。

当找到app.config文件时,它应该调用我的函数。 有什么建议吗?

评论:代码的小格式修复

在文件夹中查找文件的方式

我正在寻找PowerShell最快和最小的代码来查看包含子文件夹的文件夹以查找app.config文件。

当找到app.config文件时,它应该调用我的函数。有什么建议吗?

下面的代码只是对 app / web.config 的转换,所以我缺少的是一个可以在目录中搜索并找到应用程序的搜索路径的函数。 config 文件是。

因此,我们应该搜索C:/temp。在这里我们有

 C:/temp/folder1/app.config 
 C:/temp/folder2/subfolder1/app.config

这将导致两个发现。所以下面的函数需要调用两次。

param(
$XmlPath,
$XdtPath
)

function XmlDocTransform($xml, $xdt)
{    
    if (!$xml -or !(Test-Path -path $xml -PathType Leaf)) {
        throw "File not found. $xml";
    }

    if (!$xdt -or !(Test-Path -path $xdt -PathType Leaf)) {
        throw "File not found. $xdt";
    }

    $scriptPath = (Get-Variable MyInvocation -Scope 1).Value.InvocationName | split-path -parent
    Add-Type -LiteralPath "$scriptPath\Microsoft.Web.XmlTransform.dll"

    $xmldoc = New-Object Microsoft.Web.XmlTransform.XmlTransformableDocument;
    $xmldoc.PreserveWhitespace = $true
    $xmldoc.Load($xml);

    $transf = New-Object Microsoft.Web.XmlTransform.XmlTransformation($xdt);

    if ($transf.Apply($xmldoc) -eq $false)
    {
        throw "Transformation failed."
    }

    $xmldoc.Save($xml);
}

XmlDocTransform $XmlPath $XdtPath

2 个答案:

答案 0 :(得分:0)

Get-ChildItem -Path C:\Temp -Recurse -Filter "app.config" | ForEach-Object { 
   $AppConfigPath = $_.FullName
   XmlDocTransform -XmlPath $AppConfigPath -XdtPath $yourotherpath
}

答案 1 :(得分:0)

如果您真的需要它,那么我强烈建议您使用robocopy来完成此任务。 一段时间以来,它就包含在Windows中。

这是一个以以下代码开头的代码段:

$list = New-Object 'Collections.ArrayList'
$files = &robocopy /l "c:\" /s \\localhost\c$\nul "app.config" /bytes /ns /njh /njs /np /nc /fp /ndl /xj
foreach($file in $files) {
    $data = $file.split("`t")
    $null = $list.add([tuple]::create([uint64]$data[3], $data[4]))
}
$list