我正在使用 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
关于上下文菜单的添加,用户西蒙斯似乎已经解决了这一部分。