文章目录
- 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
效果
指定目录并搜索该目录下的所有文件(或具有特征的文件)中是否具有特定字符串
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
打印含有特定字符串或文件名的文件
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
}