如何复制(在剪贴板中)文件的详细信息?

如何复制(在剪贴板中)文件的详细信息?

我正在使用 Windows-10。

我刚刚做了大量工作来获取编译文件详细信息中的 ShortSha 信息。现在我想将这些信息复制到剪贴板中,但这似乎不起作用,正如您从此屏幕截图中看到的那样:

在此处输入图片描述

如您所见,我可以选择信息,但无法将其复制到剪贴板,而我想复制 ShortSha 以便在我的 Git-Extensions 版本控制系统中找到该信息。

就我的 Windows 版本而言,这是该winver命令的结果:

在此处输入图片描述

供您参考:我确信使用过可以复制该信息的 Windows 版本(这是一个Windows 服务器版本)。

编辑:
由于我确信我在另一个 Windows 环境中做过这个,所以我想知道该功能的确切名称以及此类 Windows 环境的示例。这样,我可能会开始搜索补丁。

编辑2:关于 PowerShell 的评论
在 Powershell 中,我启动了以下命令,这非常有希望:

Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion

如果我继续采用这个解决方案,我需要知道:

  • 如何将该结果用作输入以复制到剪贴板(Set-Clipboard -Value Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion不起作用)
  • 如何将其集成到 Windows 上下文菜单中(右键单击并启动该文件上的命令)

编辑3:关于 Windows Server 的评论
我发现我在 Windows Server 上使用此功能。此功能是否可能无法在 Windows-10 版本上运行?如果不行,是否有可用的补丁程序来使其正常运行?

答案1

您的 PowerShell 几乎是正确的,只是缺少一对括号:

Set-Clipboard -Value (Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion

要在上下文菜单中使用它,请创建一个.ps1包含以下内容的脚本文件。我的存储在 中C:\Temp\test.ps1

$param1=$args[0]
Set-Clipboard -Value (Get-Item "$param1").VersionInfo.ProductVersion

现在将以下文本复制到一个.reg文件中,然后双击它以导入注册表。它将创建一个名为“获取 DLL 版本”的上下文菜单操作并使用上述脚本(请确保在下面的文本中设置脚本的正确路径,文件名中使用双反斜杠):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Classes\dllfile]

[HKEY_CURRENT_USER\SOFTWARE\Classes\dllfile\shell]

[HKEY_CURRENT_USER\SOFTWARE\Classes\dllfile\shell\DLLVersion]
@="Get DLL version"

[HKEY_CURRENT_USER\SOFTWARE\Classes\dllfile\shell\DLLVersion\command]
@="powershell.exe -ExecutionPolicy Bypass -File \"C:\\Temp\\test.ps1\" \"%1\""

新的上下文菜单条目可以立即使用。

答案2

我不能提供太多,因为你的命令几乎是正确的,你只错过了一个左括号,但我可以告诉你如何进行批处理。

(Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion

以上获取您想要的信息,Set-Clipboard接受流水线参数,因此您可以将输出流水线传输到 cmdlet:

(Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion | Set-Clipboard

您还可以使用别名来使命令更短:

(gi "Path\to\file.dll").VersionInfo.ProductVersion | Set-Clipboard

gi是 的别名Get-Item

默认情况下,Set-Clipboard清除当前剪贴板,如果要保留当前剪贴板,请使用-Append开关。

我假设您想要获取多个 dll 的版本,您可以使用它Get-ChildItem来列出目录中的所有 dll:

Get-ChildItem -Path "path\to\folder" -File -Force -Recurse -Filter *.dll

别名:

gci "path\to\folder" -file -fo -r -filt *.dll

获取每个 dll 的版本:

Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {$_.VersionInfo.ProductVersion}

别名ForEach-Object是以% 字符串形式获取名称和版本:

Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}

上面创建了一个如下的字符串数组:

Path: C:\Windows\System32\vcruntime140.dll, Version: 14.28.29304.1

要将此数组合并为由换行符分隔的巨型字符串:

(Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}) -Join "`r`n"

最后,将整个内容粘贴到剪贴板:

((Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}) -Join "`r`n") | Set-Clipboard

将所有这些包装到一个函数中:

Function Clip-DLLVersion {
    param(
    [string]$path,
    [bool]$append = $false
    )
    $data = (Get-ChildItem $path -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}) -Join "`r`n"
    Switch ($append)
    {
        $true {Set-Clipboard -Value $data -Append}
        $false {Set-Clipboard -Value $data}
    } 
}

使用示例:

Clip-DLLVersion -path "$Env:WINDIR\System32"

编辑

根据评论更新,clip不是的别名Set-Clipboard,因此我修正了别名命令以使其普遍适用。


编辑1

修复了代码中的几个拼写错误。我把所有代码都写在手机上,所以我没有机会运行它,第一个获取名称的命令中有一个拼写错误,我将这个命令复制粘贴到后续命令中,直到现在我才注意到。

答案3

您可以尝试使用键盘上的截屏按钮截屏。或者直接使用任何第三方软件,例如 Share X。然后使用 OCR 转换为文本。

答案4

您可以使用 PowerShell 获取文件详细信息;它也适用于 Windows 10:

例如,要获取的文件信息Autoruns64.exe,请运行:

(Get-Item "D:\tools\Autoruns64.exe").VersionInfo | format-list * | Clip

关于上下文菜单的添加,用户西蒙斯似乎已经解决了这一部分。

相关内容