如何複製(在剪貼簿中)文件的詳細資訊?

如何複製(在剪貼簿中)文件的詳細資訊?

我正在使用 Windows-10。

我剛剛做了很多工作來獲取已編譯文件的詳細資訊中的 ShortSha 資訊。現在我想將該資訊複製到剪貼簿中,但這似乎不起作用,正如您從以下螢幕截圖中看到的那樣:

在此輸入影像描述

正如您所看到的,我可以選擇訊息,但無法將其複製到剪貼簿,而我想複製 ShortSha 以便在我的 Git-Extensions 版本控制系統中找到該資訊。

就我的 Windows 版本而言,這是winver命令的結果:

在此輸入影像描述

供您參考:我確信曾經使用過可以複製該資訊的 Windows 版本(這是一個Windows伺服器版本)。

編輯:
由於我確信我已經在另一個 Windows 環境中完成了此操作,因此我想知道該功能的確切名稱以及此類 Windows 環境的範例。就這樣,我可能會開始尋找補丁。

Edit2:關於PowerShell的評論
在Powershell中,我啟動了以下命令,這是非常有前途的:

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

如果我繼續使用此解決方案,我需要知道:

  • 如何使用該結果作為輸入複製到剪貼簿(Set-Clipboard -Value Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion不起作用)
  • 如何將其整合到 Windows 上下文功能表中(右鍵單擊並在該文件上啟動命令)

Edit3:關於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。

答案4

您可以使用PowerShell取得文件詳細資訊;它也適用於 Windows 10:

例如,要獲取 的文件信息Autoruns64.exe,請運行:

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

關於上下文選單添加,用戶西蒙斯似乎已經解決了這一部分。

相關內容