我正在使用 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
關於上下文選單添加,用戶西蒙斯似乎已經解決了這一部分。