[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 如何使用powershell获取某个文件右键属性中的详细信息的某些项的值

本帖最后由 5i365 于 2021-12-20 15:30 编辑

如下图所示, 我想获取某个mp3 右键属性中的详细信息里的某些项目的值
例如:
标题     的值:
参与创作的艺术家   的值

另外还想知道, 如何写判断   标题中, 只包含 伴奏 二字, 但不包含 DJ 字母, 同时  参与创作的艺术家   的值为海来阿木时   条件才为真

用下面的批处理, 也无法输出信息! 求路过的高手指点, 感谢

wmic datafile where name='C:\Users\Administrator\Desktop\新建文件夹\烟雨人间.mp3' > out.txt

用下面的代码, 能取到信息了, 但是是一列排列的, 怎样取到相应的值呢?
  1. $comShell = New-Object -ComObject Shell.Application
  2. $dir = $comShell.NameSpace("C:\Users\Administrator\Desktop\新建文件夹")
  3. $file = $dir.items() | select -First 1
  4. -1 .. 255 | foreach {
  5. $dir.GetDetailsOf($file, $_) |
  6. where {
  7. -not [string]::IsNullOrWhiteSpace($_)
  8. }
  9. }
复制代码

TOP

  1. $f="C:\Users\lenovo\Desktop\MP3\xxx.mp3"
  2. $obj=new-object -comobject shell.application
  3. $objfolder=$obj.namespace((dir $f).directoryname)
  4. $objfile=$objfolder.parsename((dir $f).name)
  5. foreach ($a in -1..255){
  6.   $details=$objfolder.getdetailsof($objfile,$a)  
  7.   if($details -ne ""){"{0}{1}{2}" -f $objfolder.getdetailsof($null,$a),":",$details}
  8. }
  9. write-host "任意键退出"
  10. $null=[console]::readkey()
复制代码

TOP

回复 3# for_flr


    感谢帮忙, 能显示信息了, 想了下, 还是不知道怎样取到值

标题     的值:
参与创作的艺术家   的值

判断   标题中, 只包含 伴奏 二字, 但不包含 DJ 字母, 同时  参与创作的艺术家   的值为海来阿木时   条件才为真

TOP

  1. $f="C:\Users\lenovo\Desktop\MP3"
  2. $obj=new-object -comobject shell.application
  3. $objfolder=$obj.namespace($f)
  4. dir $f -filter *.mp3|?{
  5. $objfile=$objfolder.parsename($_.name)
  6. $artist=$objfolder.getdetailsof($objfile,13)
  7. $title=$objfolder.getdetailsof($objfile,21)
  8. $title -match "伴奏" -and $title -notmatch "dj" -and  $artist -match "海来阿木"
  9. }
  10. write-host "任意键退出"
  11. $null=[console]::readkey()
复制代码
4楼代码用于获取文件详细信息,你只要标题和艺术家的话,对应编号是21和13。

TOP

本帖最后由 5i365 于 2021-12-20 16:38 编辑

回复 5# for_flr


    我用下面的代码, 没有输出值和$true或$false,
另外, 13和21的值, 如何确定?
  1. $f = "C:\Users\Administrator\Desktop\MP3"
  2. $obj = new-object -comobject shell.application
  3. $objfolder = $obj.namespace($f)
  4. dir $f -filter *.mp3 | ?{
  5. $objfile = $objfolder.parsename($_.name)
  6. $artist = $objfolder.getdetailsof($objfile, 13)
  7. $artist
  8. $title = $objfolder.getdetailsof($objfile, 21)
  9. $title
  10. $title -match "伴奏" -and $title -notmatch "dj" -and $artist -match "海来阿木"
  11. }
复制代码
执行信息如下:


    Directory: C:\Users\Administrator\Desktop\MP3


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2021-12-19     21:27        8669103 海来阿木 - 烟雨人间.mp3

TOP

回复 6# 5i365
true就输出MP3文件,false就不输出。并不会输出“true或false”
你多复制几个MP3文件试试看。


序号13和21是怎么得到的 ?在4楼代码这里加个$a的输出就可以看到了
  1. foreach ($a in -1..255){
  2.   $details=$objfolder.getdetailsof($objfile,$a)  
  3.   if($details -ne ""){"{0}{1}{2}" -f $objfolder.getdetailsof($null,$a),":",$details}
  4. }
复制代码
改为
  1. foreach ($a in -1..255){
  2.   $details=$objfolder.getdetailsof($objfile,$a)  
  3.   if($details -ne ""){"{0}{1}{2}{3}" -f $a,$objfolder.getdetailsof($null,$a),":",$details}
  4. }
复制代码

TOP

回复 7# for_flr


    感谢大侠详细解释:
下面这个能有信息显示了, 但是如果我加个括号后分别显示mp3的名字和完整路径, 不无法显示, 不知道为什么

($title -match "伴奏" -and $title -notmatch "dj" -and $artist -match "海来阿木").name
($title -match "伴奏" -and $title -notmatch "dj" -and $artist -match "海来阿木").fullname

TOP

  1. $f = "C:\Users\Administrator\Desktop\MP3"
  2. $obj = new-object -comobject shell.application
  3. $objfolder = $obj.namespace($f)
  4. dir $f -filter *.mp3 | %{
  5. $objfile = $objfolder.parsename($_.name)
  6. $artist = $objfolder.getdetailsof($objfile, 13)
  7. $artist
  8. $title = $objfolder.getdetailsof($objfile, 21)
  9. $title
  10. if($title -match "伴奏" -and $title -notmatch "dj" -and $artist -match "海来阿木"){
  11. $_.fullname
  12. $_.name
  13. }
  14. }
复制代码
原来用的是where-object,只输出符合大括号里的条件的内容。
你可以改成foreach-object,这样就在大括号里加if条件。
1

评分人数

TOP

返回列表