有没有办法在 Windows DOS/Powershell 上打开与特定目录结构匹配的所有文件

有没有办法在 Windows DOS/Powershell 上打开与特定目录结构匹配的所有文件

我在一台运行 Windows (Server 2008) 的计算机上,它提供网站服务。网站被组织到文件夹中:

c:/Websites/
           /www.mysite.com
           /www.mysite.co.uk
           /www.mysite.com.au
           /beta.mysite.com
           /beta.mysite.co.uk
           /www.mysite.com.au

除了 web.config 等配置文件之外,每个文件夹都共享几乎相同的内容。

我想在所有这些网站中打开同一个文件来执行一些编辑。

是否有一个 Dos / Powershell 命令可以编写来打开所有具有相同目录结构、文件名和扩展名的文件,例如打开根网站文件夹内特定目录内的配置文件?

我可以在特定的文本编辑器中打开它们吗?

答案1

使用此 powershell 脚本:

$editorPath = "C:\Program Files (x86)\Notepad++\notepad++.exe"
$websites = Get-ChildItem -Path "C:/Websites" | Where { $_.PSIsContainer }
foreach ($website in $websites)
{
    $webConfigPath = $website.FullName + "\web.config"
    if (Test-Path -Path $webConfigPath)
    {
        Start-Process -FilePath $editorPath -ArgumentList $webConfigPath
    }
}

它将使用 notepad++打开web.config所有文件夹中的所有文件。C:/Websites

您还可以使用应用程序命令获取网站。这将仅获取网站,而不是所有文件夹。

答案2

以下是我使用的完整脚本

#First choose an editor
$editorPath = "C:\Program Files (x86)\Notepad++\notepad++.exe"

#Next loop through a folder recusivly looking for "web.config"
#Recursive allows us to get websites stored inside websites
Get-ChildItem -Path "C:/Websites/" -recurse -filter web.config |

    #This is a where clause for each file.
    #I can find just the websites for a specific domain 
    #(or just delete this line below)
    ?{ $_.Directory.Name -match ".co.uk" } |

    #Now fire open that editor with this specific file
    %{Start-Process -FilePath $editorPath -ArgumentList $_.fullname}

找到的文件将逐个放入编辑器中。

答案3

这个答案是基于原始问题的(由于问题已更新,这个答案并非 100% 相关,但它将来可能仍然有用,所以我不会删除它)

您可以在批处理文件中使用启动命令。由于我假设您已经知道配置文件的位置,因此您可以编写一个列表,然后从批处理文件中执行它。

START c:/Websites/www.mysite.com/web.config  
START c:/Websites/www.mysite.co.uk/web.config  
START c:/Websites/www.mysite.au/web.config

您可能需要将配置文件与特定的编辑器关联起来,因为这将使用关联的程序打开该文件。

答案4

一个非常简单的 *nix 等效项向我暗示,我们应该花时间学习 *nix shell 命令和脚本,即使我们主要在 MS Windows 上工作:

find . -name web.config | xargs start notepad++

此功能仅在安装了 Unix 实用程序(例如通过)的情况下才在 MS Windows 上有效赛格威或者(我个人最喜欢的)git bash,它是适用于 Windows 的 Git

相关内容