0
点赞
收藏
分享

微信扫一扫

powershell_利用powershell搜索系统中的目录(文件夹)/文件/批量搜索特定文件集中的字符串/打印含有特定字符串的文件


文章目录

  • ​​reference​​
  • ​​搜索文件(search files)​​
  • ​​搜索目录(search Directory/folder)​​
  • ​​效果​​
  • ​​指定目录并搜索该目录下的所有文件(或具有特征的文件)中是否具有特定字符串​​
  • ​​preview​​
  • ​​打印含有特定字符串或文件名的文件​​
  • ​​辅助函数(optional)​​
  • ​​catn​​
  • ​​PrintBorder​​


reference

  • ​​How to search for a folder with PowerShell - Stack Overflow​​

搜索文件(search files)

function searchFiles
{
<#
.synopsis
从当前目录开始递归查找具有指定名称的文件
.Example
searchFiles "css"
#>
param(
$pattern
)
# $wildPattern="*$pattern*"
Get-ChildItem -File $pattern -Recurse | Select-Object FullName
# ls -file index.html -R|select FullName
}

搜索目录(search Directory/folder)

function searchDirectories
{
<#
.synopsis
从当前目录开始递归查找具有指定名称的目录
.Example
searchDirectories 'css'
searchDirectories -Dir $env:blogs -pattern css
#>
param(
$pattern,
$Dir = './'
)
# $wildPattern="*$pattern*"
Write-Output 'searching...'
Get-ChildItem -Path $Dir -Directory -Recurse $pattern | Select-Object name, FullName
# Get-ChildItem $Dir -Directory -Recurse | Where-Object { $_.Name -like $pattern } | Select-Object name, FullName
# Get-ChildItem $Dir -R -V | Where-Object { $_.Attributes -eq 'Directory' -and $_.Name -like $pattern } | Select-Object FullName
# | Where-Object { $_.Name -eq $pattern }
}

如果想要兼容通配符,可以使用-like 而非-eq

效果

powershell_利用powershell搜索系统中的目录(文件夹)/文件/批量搜索特定文件集中的字符串/打印含有特定字符串的文件_搜索

指定目录并搜索该目录下的所有文件(或具有特征的文件)中是否具有特定字符串

function searchContentWithSpecifiedFiles
{
param(
$dirFrom = '.',
$fileNamePattern,
$content
)
Get-ChildItem $dirFrom -File $fileNamePattern -Recurse | Select-String $content
# borderPrint
# 打印本次函数运行的参数
Write-Output "@content=$content,
`n@fileNamePattern=$fileNamePattern,
`n@DirFrom=$dirFrom
"
}

可选部分
上方被注释的borderPrint函数:

function borderPrint
{
param (
$borderUnit = '-~',
$timesOfRepeat = 30
)
$border = ''
# Write-Output 50*$borderUnit
for ($i = 0; $i -lt $timesOfRepeat; $i++)
{
# $border = $border + $borderUnit
$border += $borderUnit
}
Write-Output $border
}

preview

powershell_利用powershell搜索系统中的目录(文件夹)/文件/批量搜索特定文件集中的字符串/打印含有特定字符串的文件_搜索_02
powershell_利用powershell搜索系统中的目录(文件夹)/文件/批量搜索特定文件集中的字符串/打印含有特定字符串的文件_java_03

打印含有特定字符串或文件名的文件

function searchStrWithCat
{
param (
$pattern
)
# todo
# Get-ChildItem $env:scripts\ModulesByCxxu\ConstantStrings -r | ForEach-Object { if ($_.ToString() -like "*$pattern*") { Write-Output $_ catn $_ } }
Get-ChildItem $env:scripts\ModulesByCxxu\ConstantStrings -r |
ForEach-Object {
if (($_.ToString() -like "*$pattern*") -or ( Select-String -Path $_ -Pattern $pattern ) )
{
Write-Output $_;
PrintBorder
# catn 是自定义函数模仿linux cat -n 效果.
catn $_ ;
# 如果使用break,则指打印第一个满足条件的文件
# break ;
PrintBorder

}
}
}

辅助函数(optional)

catn

catn 可以用自带的cat 代替

function catn
{
<#
.Synopsis
来源于stackOverflow!
Mimic Unic / Linux tool nl number lines

.Description
Print file content with numbered lines no original nl options supported

.Example
nl .\food.txt
#>
param (
[parameter(mandatory = $true, Position = 0)]
[String]$FileName
)

process
{
If (Test-Path $FileName)
{
# core logic for the function
# 关键在于格式化'{0,5} {1}' -f
Get-Content $FileName | ForEach-Object { '{0,-5} {1}' -f $_.ReadCount, $_ }
}
}
}

PrintBorder

可以主函数中可以注释掉

function PrintBorder
{
param (
$borderUnit = '-~',
$timesOfRepeat = 30
)
$border = ''
# Write-Output 50*$borderUnit
for ($i = 0; $i -lt $timesOfRepeat; $i++)
{
# $border = $border + $borderUnit
$border += $borderUnit
}
Write-Output $border
}


举报

相关推荐

0 条评论