Как скопировать (в буфер обмена) подробную информацию о файле?

Как скопировать (в буфер обмена) подробную информацию о файле?

Я работаю с 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файл, а затем дважды щелкните его, чтобы импортировать в реестр. Это создаст действие контекстного меню под названием "Get DLL version" и использует указанный выше скрипт (убедитесь, что вы указали правильный путь к скрипту в тексте ниже, с двойными обратными косыми чертами внутри имени файла):

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принимает конвейерные аргументы, поэтому вы можете передать вывод в командлет:

(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-Objectis % Получить имя и версию в строке:

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

Вы можете попробовать сделать снимок экрана, используя кнопку Print Screen на клавиатуре. Или просто используйте стороннее программное обеспечение, например Share X. Затем используйте OCR для преобразования в текст.

решение4

Вы можете получить сведения о файле с помощью PowerShell; это работает и в Windows 10:

Например, чтобы получить информацию о файле Autoruns64.exe, выполните:

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

Что касается добавления контекстного меню, пользовательСаймонСпохоже, что эта часть была рассмотрена.

Связанный контент