标题: [问题求助] 如何使用powershell获取某个文件右键属性中的详细信息的某些项的值 [打印本页]
作者: 5i365 时间: 2021-12-19 20:06 标题: 如何使用powershell获取某个文件右键属性中的详细信息的某些项的值
本帖最后由 5i365 于 2021-12-20 15:30 编辑
如下图所示, 我想获取某个mp3 右键属性中的详细信息里的某些项目的值
例如:
标题 的值:
参与创作的艺术家 的值
另外还想知道, 如何写判断 标题中, 只包含 伴奏 二字, 但不包含 DJ 字母, 同时 参与创作的艺术家 的值为海来阿木时 条件才为真
用下面的批处理, 也无法输出信息! 求路过的高手指点, 感谢
wmic datafile where name='C:\Users\Administrator\Desktop\新建文件夹\烟雨人间.mp3' > out.txt
作者: 5i365 时间: 2021-12-19 20:41
用下面的代码, 能取到信息了, 但是是一列排列的, 怎样取到相应的值呢?- $comShell = New-Object -ComObject Shell.Application
- $dir = $comShell.NameSpace("C:\Users\Administrator\Desktop\新建文件夹")
- $file = $dir.items() | select -First 1
- -1 .. 255 | foreach {
- $dir.GetDetailsOf($file, $_) |
- where {
- -not [string]::IsNullOrWhiteSpace($_)
- }
- }
复制代码
作者: for_flr 时间: 2021-12-20 13:14
- $f="C:\Users\lenovo\Desktop\MP3\xxx.mp3"
- $obj=new-object -comobject shell.application
- $objfolder=$obj.namespace((dir $f).directoryname)
- $objfile=$objfolder.parsename((dir $f).name)
- foreach ($a in -1..255){
- $details=$objfolder.getdetailsof($objfile,$a)
- if($details -ne ""){"{0}{1}{2}" -f $objfolder.getdetailsof($null,$a),":",$details}
- }
- write-host "任意键退出"
- $null=[console]::readkey()
复制代码
作者: 5i365 时间: 2021-12-20 15:29
回复 3# for_flr
感谢帮忙, 能显示信息了, 想了下, 还是不知道怎样取到值
标题 的值:
参与创作的艺术家 的值
判断 标题中, 只包含 伴奏 二字, 但不包含 DJ 字母, 同时 参与创作的艺术家 的值为海来阿木时 条件才为真
作者: for_flr 时间: 2021-12-20 16:23
- $f="C:\Users\lenovo\Desktop\MP3"
- $obj=new-object -comobject shell.application
- $objfolder=$obj.namespace($f)
- dir $f -filter *.mp3|?{
- $objfile=$objfolder.parsename($_.name)
- $artist=$objfolder.getdetailsof($objfile,13)
- $title=$objfolder.getdetailsof($objfile,21)
- $title -match "伴奏" -and $title -notmatch "dj" -and $artist -match "海来阿木"
- }
- write-host "任意键退出"
- $null=[console]::readkey()
复制代码
4楼代码用于获取文件详细信息,你只要标题和艺术家的话,对应编号是21和13。
作者: 5i365 时间: 2021-12-20 16:31
本帖最后由 5i365 于 2021-12-20 16:38 编辑
回复 5# for_flr
我用下面的代码, 没有输出值和$true或$false,
另外, 13和21的值, 如何确定?- $f = "C:\Users\Administrator\Desktop\MP3"
- $obj = new-object -comobject shell.application
- $objfolder = $obj.namespace($f)
- dir $f -filter *.mp3 | ?{
- $objfile = $objfolder.parsename($_.name)
- $artist = $objfolder.getdetailsof($objfile, 13)
- $artist
- $title = $objfolder.getdetailsof($objfile, 21)
- $title
- $title -match "伴奏" -and $title -notmatch "dj" -and $artist -match "海来阿木"
- }
复制代码
执行信息如下:
Directory: C:\Users\Administrator\Desktop\MP3
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021-12-19 21:27 8669103 海来阿木 - 烟雨人间.mp3
作者: for_flr 时间: 2021-12-20 16:45
回复 6# 5i365
true就输出MP3文件,false就不输出。并不会输出“true或false”
你多复制几个MP3文件试试看。
序号13和21是怎么得到的 ?在4楼代码这里加个$a的输出就可以看到了- foreach ($a in -1..255){
- $details=$objfolder.getdetailsof($objfile,$a)
- if($details -ne ""){"{0}{1}{2}" -f $objfolder.getdetailsof($null,$a),":",$details}
- }
复制代码
改为- foreach ($a in -1..255){
- $details=$objfolder.getdetailsof($objfile,$a)
- if($details -ne ""){"{0}{1}{2}{3}" -f $a,$objfolder.getdetailsof($null,$a),":",$details}
- }
复制代码
作者: 5i365 时间: 2021-12-20 17:11
回复 7# for_flr
感谢大侠详细解释:
下面这个能有信息显示了, 但是如果我加个括号后分别显示mp3的名字和完整路径, 不无法显示, 不知道为什么
($title -match "伴奏" -and $title -notmatch "dj" -and $artist -match "海来阿木").name
($title -match "伴奏" -and $title -notmatch "dj" -and $artist -match "海来阿木").fullname
作者: for_flr 时间: 2021-12-20 17:18
- $f = "C:\Users\Administrator\Desktop\MP3"
- $obj = new-object -comobject shell.application
- $objfolder = $obj.namespace($f)
- dir $f -filter *.mp3 | %{
- $objfile = $objfolder.parsename($_.name)
- $artist = $objfolder.getdetailsof($objfile, 13)
- $artist
- $title = $objfolder.getdetailsof($objfile, 21)
- $title
- if($title -match "伴奏" -and $title -notmatch "dj" -and $artist -match "海来阿木"){
- $_.fullname
- $_.name
- }
- }
复制代码
原来用的是where-object,只输出符合大括号里的条件的内容。
你可以改成foreach-object,这样就在大括号里加if条件。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |