我们如何使用Microsoft Windows 电源外壳和正则表达式 (Regex)为了找到所有的图片(图像文件)在计算机上,文件名包含单词“狗“。
我们希望考虑许多不同的文件后缀,而不仅仅是.jpg
:
.ACAD
.AFD
.AFP
.AOM
.AOMA
.APNG
.ASCII
.AVIF
.AVIFAV
.BMP
.BPG
.CABAC
.CDEC
.CDR
.CDRAW
.CGM
.CHEVC
.CIEC
.CIPA
.CMYK
.COLLADA
.CRT
.CWC
.DEEP
.DGN
.DML
.DRAW
.DXFDXF
.DXML
.ECW
.EMF
.EPS
.ERDAS
.EXIF
.FAMF
.FCCBY
.FDRW
.FIFF
.FITS
.FLIF
.FPGF
.FRIFF
.FVRML
.FXD
.GEM
.GIF
.GIMP
.GLE
.GMNG
.GMPEG
.GPNG
.GSVG
.HDR
.HEIF
.HEVC
.HPGL
.HSF
.HVIF
.ICC
.ICO
.IESC
.IESCD
.IGES
.ILBM
.IMAGINE
.IMAGINE
.IMG
.IMML
.INDD
.IPA
.ISGI
.ISO
.JFIF
.JFIFJPEG
.JPEG
.JPEGHDR
.JPEGJPEG
.JPG
.JPL
.JPS
.KKRA
.LCM
.LPCL
.LXAML
.LZW
.LZWLZW
.MANIAC
.MDP
.MEMF
.MML
.MOV
.MPO
.MSID
.MSIDSID
.MWMF
.NAPLPS
.NASA
.OBJ
.OCR
.ODG
.OGEX
.OGL
.PAM
.PBM
.PCB
.PCLIP
.PCPT
.PCX
.PDF
.PGFTZ
.PGM
.PGML
.PICT
.PLBM
.PLY
.PNG
.PNM
.PNS
.POVR
.PPDN
.PPM
.PPSP
.PRC
.PSD
.PST
.PXMP
.QCC
.RAW
.RGBE
.RGIS
.RIFF
.RISCOS
.RSX
.SAI
.SAISAI
.SISO
.STEP
.STL
.SUSKP
.SVG
.SVGC
.SWF
.SXML
.TARGA
.TGATGA
.TIF
.TIFF
.TVG
.TVP
.VDI
.VICAR
.VML
.VRML
.WEBP
.WMF
.WPM
.XCF
.XGL
.XISF
.XML
.XMP
.XPS
.XVL
powershell 里有类似的东西吗?
PS > dir | ?{$_.name -match "^[0-9]{3}x[0-9]{3}.jpg$"}
答案1
使用Get-Content
将文件列表(带扩展名)放入array
变量中。接下来使用Get-ChildItem
其-File
参数来专门定位文件对象。然后,将结果路由到ForEach-Object
循环以显示扩展名匹配的文件的完整文件路径和文件名数组变量中的内容。
电源外壳
$keyword = "dog";
$ext = Get-Content -Path "C:\Folder\ExtList.txt";
Get-ChildItem -File | ForEach-Object {If($_.Extension -in $ext -and $_.Name -match $keyword){$_.FullName}};
##Get-ChildItem -File -Recurse | ForEach-Object {If($_.Extension -in $ext -and $_.Name -match $keyword){$_.FullName}};
支持资源
答案2
正如其他人所说,将扩展放在数据文件中,但我会选择:
$Keyword = 'dog'
$ExtList = 'c:\Data\imageExtensions.txt'
$RegEx4Match = '^.*{0}.*\.({1})$' -f $Keyword , ((Get-Content $ExtList) -join '|' -replace '\.')
Get-ChildItem -File | where Name -match $RegEx4Match
使用 Get-ChildItem,您可以使用-Path
参数来搜索当前工作目录以外的目录。要包含子文件夹,请添加参数-Recurse
。
答案3
将问题中列出的所有扩展名放入一个文件中并保存。假设您的文件名为myextensions.txt
。使用以下 cmdlet:
Get-Content -Path C:\path\to\myextensions.txt | foreach { dir *dog* -Include "*$_" }
解释:
Get-Content -Path C:\path\to\myextensions.txt
:读取文件的内容| foreach { dir *dog* -Include "*$_" }
:将前一个 cmdlt 的结果应用于每一行(扩展名),以列出名称中包含“dog”和扩展名的文件。
答案4
比列出每个文件容易得多扩大,Windows 有以下概念种类。例如,在 Windows 资源管理器中,要搜索所有文件名包含“狗”和种类“图像”(或“图片”;两者都有效),请输入以下内容作为搜索参数:filename:*dog* AND kind:image
。并不总是需要星号通配符。
当然,这只适用于已注册的图像扩展,但可以HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\KindMap
使用 Regedit 轻松添加任何缺失的扩展:
- 按Windows,输入雷格并选择注册表编辑器。
- 复制
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\KindMap
并粘贴到导航栏即可转到该位置。 - 如果缺少扩展的值,例如.png,
- 右键单击右侧窗格。
- 选择新建 > 字符串值。
- 输入扩展名,包括前导句号(句号)。
- 双击该值并输入图片为了值数据。
这些更改立即生效;搜索该扩展名种类:图像或者种类:图片将会成功。
也可以看看堆栈溢出使用 PowerShell 进行此类搜索。