¿Cómo copiar (en el portapapeles) información detallada de un archivo?

¿Cómo copiar (en el portapapeles) información detallada de un archivo?

Estoy trabajando con Windows-10.

Acabo de trabajar bastante para obtener información de ShortSha en los detalles de un archivo compilado. Ahora me gustaría copiar esa información al portapapeles pero parece que esto no funciona, como puede ver en esta captura de pantalla:

ingrese la descripción de la imagen aquí

Como puede ver, puedo seleccionar la información, pero no puedo copiarla al portapapeles, mientras que me gustaría copiar ShortSha para encontrar esa información en mi sistema de versiones Git-Extensions.

En lo que respecta a mi versión de Windows, este es el resultado del winvercomando:

ingrese la descripción de la imagen aquí

Para tu información: estoy seguro de haber trabajado con una versión de Windows donde era posible copiar esa información (esa fue unaServidor de windowsversión).

Editar:
Como estoy seguro de haber hecho esto en otro entorno de Windows, me gustaría saber el nombre exacto de esa característica y un ejemplo de dicho entorno de Windows. De esa manera, podría empezar a buscar un parche.

Edit2: comentario sobre PowerShell
En Powershell, lancé el siguiente comando, que es muy prometedor:

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

En caso de continuar con esta solución, necesitaría saber:

  • Cómo usar ese resultado como entrada para copiar al portapapeles ( Set-Clipboard -Value Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersionno funciona)
  • Cómo integrar esto en el menú contextual de Windows (haga clic derecho y ejecute el comando en ese archivo)

Edit3: comentario sobre Windows Server
Descubrí que estaba trabajando en Windows Server y usando esta función. ¿Es posible que esta característica no funcione en una versión de Windows-10? Si no es así, ¿hay algún parche disponible para que esto funcione?

Respuesta1

Su PowerShell era casi correcto, solo le faltaba un par de paréntesis:

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

Para usarlo en el menú contextual, cree un .ps1archivo de script con el siguiente contenido. El mío estaba almacenado en C:\Temp\test.ps1.

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

Ahora copie el siguiente texto en un .regarchivo y luego haga doble clic en él para importarlo al registro. Creará una acción de menú contextual llamada "Obtener versión DLL" y utilizará el script anterior (asegúrese de establecer la ruta correcta al script en el texto a continuación, con doble barra invertida dentro del nombre del archivo):

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\""

La nueva entrada del menú contextual se puede utilizar inmediatamente.

Respuesta2

No puedo ofrecer mucho, ya que su comando es casi correcto, solo se perdió por un corchete izquierdo, pero puedo decirle cómo realizar el procesamiento por lotes.

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

Lo anterior obtiene la información que desea y Set-Clipboardacepta argumentos canalizados, por lo que puede canalizar la salida al cmdlet:

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

También puedes usar alias para acortar el comando:

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

gies un alias de Get-Item.

De forma predeterminada, Set-Clipboardborra el portapapeles actual; si desea conservar el portapapeles actual, use -Appendel interruptor.

Supongo que desea obtener las versiones de varios archivos DLL, puede utilizarlos Get-ChildItempara enumerar todos los archivos DLL dentro del directorio:

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

Aliado:

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

Para obtener las versiones de cada dll:

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

Alias ​​de ForEach-Objectis % Obtiene el nombre y la versión en una cadena:

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

Lo anterior crea una serie de cadenas como esta:

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

Para unir esta matriz en una cadena gigante delimitada por nuevas líneas:

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

Finalmente, pega todo esto en el portapapeles:

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

Envuelva todo esto en una función:

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}
    } 
}

Uso de ejemplo:

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

Editar

Actualizado por comentario, clipno es un alias de Set-Clipboard, por lo que corregí el comando con alias para que sea aplicable de forma general.


Editar 1

Se corrigieron varios errores tipográficos en el código. Lo escribí todo en un teléfono, así que no tuve la oportunidad de ejecutarlo, hubo un error tipográfico en el primer comando para obtener los nombres, y copié y pegué ese comando en los comandos posteriores, no lo noté hasta ahora. .

Respuesta3

Puedes intentar hacer un resumen de pantalla usando el botón Imprimir pantalla en tu teclado. O simplemente utilice cualquier software de terceros como Share X. Luego utilice OCR para convertir a texto.

Respuesta4

Puede obtener los detalles del archivo usando PowerShell; También funciona en Windows 10:

Por ejemplo, para obtener la información del archivo Autoruns64.exe, ejecute:

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

En cuanto a la adición del menú contextual, el usuariosimonsParece haber abordado esa parte.

información relacionada