কমান্ড লাইন থেকে দুটি এক্সিকিউটেবলের সংস্করণটি আমি কীভাবে তুলনা করতে পারি?


13

আমার দুটি এক্সিকিউটেবল (file1.exe এবং file2.exe) রয়েছে।

উভয়ই "একই" ফাইল, তবে একটি অন্যটির চেয়ে বিক্রেতার কাছ থেকে একটি নতুন সংস্করণ। আমি যখন এগুলির মধ্যে একটির জন্য সম্পত্তিগুলি খুলি, আমি বিশদ ট্যাবের নীচে নিম্নলিখিতটি পাই:

এখানে চিত্র বর্ণনা লিখুন

ব্যাচে, আমি দুটি ফাইল সংস্করণ তুলনা করতে চাই এবং সংস্করণগুলি পৃথক হলে কিছু করতে চাই ("যদি এটি হয় তবে সেই" প্রেক্ষাপটের ধরণ)।

আমি উচ্চ এবং নিম্ন সন্ধান করেছি, কিন্তু ব্যাচের "ফাইল সংস্করণ" বৈশিষ্ট্যটি দেখার কোনও পদ্ধতি খুঁজে পাচ্ছি না। এটি সম্পাদনের কোনও উপায় আছে কি?

দয়া করে নোট করুন যে এটি "আমার জন্য একটি স্ক্রিপ্ট লিখুন" প্রশ্নের উদ্দেশ্য নয়। উদ্দেশ্যটি আরও সাধারণ ওভারভিউ বা উত্তরের বর্ণনার জন্য, কোন পর্যায়ে, বিশদটি আরও সহজেই আসতে সক্ষম হওয়া উচিত।

উত্তর:


27

সিগচেক - সিসিনটার্নাল স্যুট

sigcheck -a -q %windir%\system32\mstsc.exe

- প্রয়োজনে MD5, SHA1, PESHA1, SHA256 যুক্ত করুন

    sigcheck -a -q -h %windir%\system32\mstsc.exe

- পরীক্ষা সংস্করণ, এবং কমান্ড চালান:

    sigcheck -a -q %windir%\system32\mstsc.exe | find "Prod version:" | find "6.0.6001.18564" && Echo "RDP 6.0.6001.18564"

ফাইলভার - সমর্থন সরঞ্জাম:

উইন্ডোজ এক্সপি সার্ভিস প্যাক 2 সমর্থন সরঞ্জাম বা

উইন্ডোজ সার্ভার 2003 পরিষেবা প্যাক 2 32-বিট সমর্থন সরঞ্জাম Tools

filever /V %windir%\system32\mstsc.exe

var 2:

  • filever /V %windir%\system32\mstsc.exe | findstr "FileDesc Version"
    
  • filever /V %windir%\system32\mstsc.exe | findstr "ProductVersion" | find "6.0.6001.18564" && Echo "RDP 6.0.6001.18564"
    
  • filever /V %windir%\system32\mstsc.exe | findstr "ProductVersion" | find "6.0.6001.18564" || Echo "NOT 6.0.6001.18564"
    

wmic:

wmic datafile where "name='C:\\<windows dir>\\system32\\mstsc.exe'" get version

শক্তির উৎস:

নথি বিবরণ:

powershell (gi %windir%\system32\mstsc.exe).versioninfo.FileDescription

সংস্করণ:

powershell (gi %windir%\system32\mstsc.exe).versioninfo ^|Ft -Au

স্ক্রিপ্ট সংস্করণ তুলনা:

$VerArr = [version]"8.2.6001.18564", [version]"6.0.6001.18564"
[version]$v1="8.2.6001.18564"
[version]$v2="6.0.6001.18564"
[version]$v3=(gi $env:windir\system32\mstsc.exe).versioninfo.ProductVersion
$v3
$v3 -ge $v1
$v3 -ge $v2
If ($VerArr -contains $v3)
   {
   echo 'Run version list block'
   }

আউটপুট:

Major  Minor  Build  Revision
-----  -----  -----  --------
6      0      6001   18564
False
True
Run version list block

WSH:

cscript //Nologo vers01.vbs

vers01.vbs:

WScript.Echo CreateObject("Scripting.FileSystemObject").GetFileVersion(CreateObject("WScript.Shell").Environment("Process")("WINDIR") & "\system32\mstsc.exe")

JScript:

cscript //Nologo vers01.js

vers01.js:

WScript.Echo(new ActiveXObject("Scripting.FileSystemObject").GetFileVersion(new ActiveXObject("WScript.Shell").ExpandEnvironmentStrings("%windir%")+"//system32//mstsc.exe"));

পাইথন, পেফিল :

পেফিল মোডিল ইনস্টল করুন: আনজিপ করুন, চালান python setup.py install

import pefile, os

pe = pefile.PE(os.path.join(os.environ['WINDIR'],'system32\mstsc.exe'))
ProductVersion = pe.FileInfo[0].StringTable[0].entries['ProductVersion']
print ProductVersion

পিএইচপি:

php vers01.php

php.ini ( %windir%):

extension_dir = C:\php\ext\

[COM_DOT_NET]
extension=php_com_dotnet.dll

vers01.php:

<?php
$path = getenv('SystemRoot').'\\system32\\mstsc.exe';
$fso = new COM("Scripting.FileSystemObject");
echo $fso->GetFileVersion($path);
?>

পার্ল:

Win32 :: ফাইল :: VersionInfo মডিউলটি ইনস্টল করুন: cpan Win32::File::VersionInfo

use Win32::File::VersionInfo;

  $fn=$ENV{windir} . "\\system32\\mstsc.exe";
  $fl=GetFileVersionInfo($fn);
  if($fl){print $fl->{FileVersion},"\n";}

1
সম্পাদনাগুলি স্থিত করে দেখুন এবং প্রতি 10 মিনিটে বাম্পিংয়ের উপর সহজ করুন
এলোমেলো

4
@ র্যান্ডম হায়রে এটি যা উন্নত করার চেষ্টা করে। আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ, আমি বড় পরিবর্তন আনার চেষ্টা করব।
STTR

2

@ এসটিটিআর'র উত্তরটি ঠিক আছে, ব্যান্ডে সংস্করণগুলির তুলনা করার উপায় সরবরাহ না করা ব্যতীত এটি সমস্যাও হতে পারে, উদাহরণস্বরূপ, 6.3.9600 এর সাথে 10.0.10049 তুলনা করার সময়।

আপনি যদি এটি সরল সাথে করেন তবে আপনি স্ট্রিং তুলনাIF %ver1% GTR %ver% পাবেন এবং তার চেয়ে বড় প্রদর্শিত হবে ।6.3.960010.0.10049

আমি জানি আপনি এটি "আমার জন্য লেখেন না" বলেছিলেন, তবে এই ক্ষেত্রে যখন সরল ইংরেজিতে ব্যাখ্যা দেওয়ার চেয়ে কোড লেখা সহজ হয় (এবং কোডটি স্বতঃস্পষ্টমূলক)।

Https://superuser.com/a/363308/131936 থেকে আমি ফাইল সংস্করণ ব্যবহার করে কীভাবে পড়তে পেলাম wmic, যা খালি উইন্ডো দিয়ে পাঠানো হয়।

compareVersion.cmd

(
SETLOCAL
ECHO Usage: %0 <file> [<MinVer>]
ECHO If second argument provided, returns error level 1 if version of file is less than required
ECHO Otherwise, sets %%filever%% variable to file version No.

rem /superuser//a/363308/131936
SET "fileNameForWMIC=%~1"
)
SET fileNameForWMIC=%fileNameForWMIC:\=\\%
FOR /F "usebackq skip=1" %%I IN (`wmic datafile where Name^="%fileNameForWMIC%" get Version`) DO (
    SET filever=%%~I
    GOTO :break
)
:break
(
IF "%~2"=="" (
    ENDLOCAL
    SET "filever=%filever%"
    EXIT /B
)
FOR /F "delims=. tokens=1,2,3,4" %%I IN ("%filever%") DO (
    SET fileverSub1=%%I
    SET fileverSub2=%%J
    SET fileverSub3=%%K
    SET fileverSub4=%%L
)
FOR /F "delims=. tokens=1,2,3,4" %%I IN ("%~2") DO (
    SET chkSub1=%%I
    SET chkSub2=%%J
    SET chkSub3=%%K
    SET chkSub4=%%L
)
IF NOT DEFINED fileverSub2 SET fileverSub2=0
IF NOT DEFINED fileverSub3 SET fileverSub3=0
IF NOT DEFINED fileverSub4 SET fileverSub4=0
IF NOT DEFINED chkSub2 SET chkSub2=0
IF NOT DEFINED chkSub3 SET chkSub3=0
IF NOT DEFINED chkSub4 SET chkSub4=0
)
(
ENDLOCAL
IF %chkSub1% GTR %fileverSub1% EXIT /B 1
IF %chkSub2% GTR %fileverSub2% EXIT /B 1
IF %chkSub3% GTR %fileverSub3% EXIT /B 1
IF %chkSub4% GTR %fileverSub4% EXIT /B 1
EXIT /B 0
)

আপনার প্রশ্ন সম্পর্কিত এটি কীভাবে ব্যবহার করবেন:

প্রথমে একটি ফাইল সংস্করণ পড়ুন:

CALL compareVersion.cmd file1.exe
SET file1ver=%filever%

তারপরে এটি অন্যান্য ফাইল (গুলি) এর সাথে তুলনা করুন:

CALL compareVersion.cmd file2.exe %file1ver%

IF ERRORLEVEL 1 (
    … do this when file2 is lower version than file1…
) ELSE (
    … do this when file2 is higher or equal to version of file1…
)

এছাড়াও, আপনি হার্ডকোড সংস্করণ করতে পারেন, যদি আপনি চান:

CALL compareVersion.cmd file2.exe 1.2.3.4 || (ECHO Min required version 1.2.3.4 not provided & EXIT /B)

পিএস এখানে অনুরূপ নীতির ভিত্তিতে উইন্ডোজ সংস্করণটি পড়তে / পরীক্ষা করতে আমার স্ক্রিপ্ট is


1

সংস্করণ চেকিংয়ের জন্য ঠিক নয়, আপনি দুটি ফাইলের MD5 বা SHA1 চেকসামটি গণনা করতে এবং তুলনা করতে পারেন এবং তারপরে যদি একই হয় তবে তুলনা করতে পারেন। যদি চেকসাম স্ট্রিংগুলি সমান হয় তবে দুটি ফাইল হুবহু (একই সংস্করণ) অন্যথায় পৃথক।

চেকসাম গণনা করতে আপনি কমান্ড লাইনে FCIV সরঞ্জামটি ব্যবহার করতে পারেন


1
আমি বিশ্বাস করি না যে ওপি হ'ল তার পরে ... আমি মনে করি সেগুলি ফাইল সংস্করণের পরে রয়েছে, উইন্ডোজ দ্বারা রিপোর্ট করা হিসাবে
কানাডিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.