Copying a file hash to clipboard without PowerShell











up vote
2
down vote

favorite
1












… isn't easy.



@echo off&(for /f "tokens=*" %%a in ('certutil -hashfile "%1" MD5') do echo %%a&for /f "delims=" %%b in ('echo %%a^|findstr /r /i /x [0-9A-F]*') do if "%%b" neq "" echo %%b|clip&pause&exit)&pause


PowerShell is slow to load so I used batch instead. I use this command to extend the context menu of windows explorer, hence a single line.



There is one minor issue; certutil doesn't support empty files.



Bonus registry entries: https://paste.ee/p/sgSJY










share|improve this question
























  • Why not put in multiple lines? Programs associated with file types can be arbitrarily long, as long as the invocation is single line.
    – Alejandro
    Feb 21 at 18:27















up vote
2
down vote

favorite
1












… isn't easy.



@echo off&(for /f "tokens=*" %%a in ('certutil -hashfile "%1" MD5') do echo %%a&for /f "delims=" %%b in ('echo %%a^|findstr /r /i /x [0-9A-F]*') do if "%%b" neq "" echo %%b|clip&pause&exit)&pause


PowerShell is slow to load so I used batch instead. I use this command to extend the context menu of windows explorer, hence a single line.



There is one minor issue; certutil doesn't support empty files.



Bonus registry entries: https://paste.ee/p/sgSJY










share|improve this question
























  • Why not put in multiple lines? Programs associated with file types can be arbitrarily long, as long as the invocation is single line.
    – Alejandro
    Feb 21 at 18:27













up vote
2
down vote

favorite
1









up vote
2
down vote

favorite
1






1





… isn't easy.



@echo off&(for /f "tokens=*" %%a in ('certutil -hashfile "%1" MD5') do echo %%a&for /f "delims=" %%b in ('echo %%a^|findstr /r /i /x [0-9A-F]*') do if "%%b" neq "" echo %%b|clip&pause&exit)&pause


PowerShell is slow to load so I used batch instead. I use this command to extend the context menu of windows explorer, hence a single line.



There is one minor issue; certutil doesn't support empty files.



Bonus registry entries: https://paste.ee/p/sgSJY










share|improve this question















… isn't easy.



@echo off&(for /f "tokens=*" %%a in ('certutil -hashfile "%1" MD5') do echo %%a&for /f "delims=" %%b in ('echo %%a^|findstr /r /i /x [0-9A-F]*') do if "%%b" neq "" echo %%b|clip&pause&exit)&pause


PowerShell is slow to load so I used batch instead. I use this command to extend the context menu of windows explorer, hence a single line.



There is one minor issue; certutil doesn't support empty files.



Bonus registry entries: https://paste.ee/p/sgSJY







windows batch






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Oct 29 '17 at 17:40

























asked Oct 29 '17 at 17:28









Avenicci

112




112












  • Why not put in multiple lines? Programs associated with file types can be arbitrarily long, as long as the invocation is single line.
    – Alejandro
    Feb 21 at 18:27


















  • Why not put in multiple lines? Programs associated with file types can be arbitrarily long, as long as the invocation is single line.
    – Alejandro
    Feb 21 at 18:27
















Why not put in multiple lines? Programs associated with file types can be arbitrarily long, as long as the invocation is single line.
– Alejandro
Feb 21 at 18:27




Why not put in multiple lines? Programs associated with file types can be arbitrarily long, as long as the invocation is single line.
– Alejandro
Feb 21 at 18:27










1 Answer
1






active

oldest

votes

















up vote
0
down vote













All zero-sized files will have the same checksum using the same given hash algorithm. Hence, use the following batch-script:



@ECHO OFF
SETLOCAL EnableExtensions
for /f %%G in ("%~1") do set "_len=%%~zG"
if %_len% EQU 0 (
echo MD5 hash of %1
echo D41D8CD98F00B204E9800998ECF8427E
echo CertUtil bypassed for zero file size
echo D41D8CD98F00B204E9800998ECF8427E|clip
) else (
for /f "tokens=*" %%a in ('certutil -hashfile "%~1" MD5') do (
echo %%a
for /f "delims=" %%b in ('echo %%a^|findstr /r /i /x ^[0-9A-F]*[0-9A-F]$') do (
if "%%b" neq "" echo %%b|clip
)
)
)
pause


Note that %%~zG expands %%G to size of file (read call /?).



if "%%b" neq "" echo %%b|clip seems to be superfluous then. Simple echo %%b|clip should suffice.



Sample output:



==> D:batCodeReview179105.bat out.txt
MD5 hash of out.txt
D41D8CD98F00B204E9800998ECF8427E
CertUtil bypassed for zero file size
Press any key to continue . . .

==> D:batCodeReview179105.bat D:batCodeReview179105.bat
MD5 hash of D:batCodeReview179105.bat:
c2a4cabffac79a26ee5ed7c97cefb44b
CertUtil: -hashfile command completed successfully.
Press any key to continue . . .

==>





share|improve this answer





















    Your Answer





    StackExchange.ifUsing("editor", function () {
    return StackExchange.using("mathjaxEditing", function () {
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
    });
    });
    }, "mathjax-editing");

    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "196"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f179105%2fcopying-a-file-hash-to-clipboard-without-powershell%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    All zero-sized files will have the same checksum using the same given hash algorithm. Hence, use the following batch-script:



    @ECHO OFF
    SETLOCAL EnableExtensions
    for /f %%G in ("%~1") do set "_len=%%~zG"
    if %_len% EQU 0 (
    echo MD5 hash of %1
    echo D41D8CD98F00B204E9800998ECF8427E
    echo CertUtil bypassed for zero file size
    echo D41D8CD98F00B204E9800998ECF8427E|clip
    ) else (
    for /f "tokens=*" %%a in ('certutil -hashfile "%~1" MD5') do (
    echo %%a
    for /f "delims=" %%b in ('echo %%a^|findstr /r /i /x ^[0-9A-F]*[0-9A-F]$') do (
    if "%%b" neq "" echo %%b|clip
    )
    )
    )
    pause


    Note that %%~zG expands %%G to size of file (read call /?).



    if "%%b" neq "" echo %%b|clip seems to be superfluous then. Simple echo %%b|clip should suffice.



    Sample output:



    ==> D:batCodeReview179105.bat out.txt
    MD5 hash of out.txt
    D41D8CD98F00B204E9800998ECF8427E
    CertUtil bypassed for zero file size
    Press any key to continue . . .

    ==> D:batCodeReview179105.bat D:batCodeReview179105.bat
    MD5 hash of D:batCodeReview179105.bat:
    c2a4cabffac79a26ee5ed7c97cefb44b
    CertUtil: -hashfile command completed successfully.
    Press any key to continue . . .

    ==>





    share|improve this answer

























      up vote
      0
      down vote













      All zero-sized files will have the same checksum using the same given hash algorithm. Hence, use the following batch-script:



      @ECHO OFF
      SETLOCAL EnableExtensions
      for /f %%G in ("%~1") do set "_len=%%~zG"
      if %_len% EQU 0 (
      echo MD5 hash of %1
      echo D41D8CD98F00B204E9800998ECF8427E
      echo CertUtil bypassed for zero file size
      echo D41D8CD98F00B204E9800998ECF8427E|clip
      ) else (
      for /f "tokens=*" %%a in ('certutil -hashfile "%~1" MD5') do (
      echo %%a
      for /f "delims=" %%b in ('echo %%a^|findstr /r /i /x ^[0-9A-F]*[0-9A-F]$') do (
      if "%%b" neq "" echo %%b|clip
      )
      )
      )
      pause


      Note that %%~zG expands %%G to size of file (read call /?).



      if "%%b" neq "" echo %%b|clip seems to be superfluous then. Simple echo %%b|clip should suffice.



      Sample output:



      ==> D:batCodeReview179105.bat out.txt
      MD5 hash of out.txt
      D41D8CD98F00B204E9800998ECF8427E
      CertUtil bypassed for zero file size
      Press any key to continue . . .

      ==> D:batCodeReview179105.bat D:batCodeReview179105.bat
      MD5 hash of D:batCodeReview179105.bat:
      c2a4cabffac79a26ee5ed7c97cefb44b
      CertUtil: -hashfile command completed successfully.
      Press any key to continue . . .

      ==>





      share|improve this answer























        up vote
        0
        down vote










        up vote
        0
        down vote









        All zero-sized files will have the same checksum using the same given hash algorithm. Hence, use the following batch-script:



        @ECHO OFF
        SETLOCAL EnableExtensions
        for /f %%G in ("%~1") do set "_len=%%~zG"
        if %_len% EQU 0 (
        echo MD5 hash of %1
        echo D41D8CD98F00B204E9800998ECF8427E
        echo CertUtil bypassed for zero file size
        echo D41D8CD98F00B204E9800998ECF8427E|clip
        ) else (
        for /f "tokens=*" %%a in ('certutil -hashfile "%~1" MD5') do (
        echo %%a
        for /f "delims=" %%b in ('echo %%a^|findstr /r /i /x ^[0-9A-F]*[0-9A-F]$') do (
        if "%%b" neq "" echo %%b|clip
        )
        )
        )
        pause


        Note that %%~zG expands %%G to size of file (read call /?).



        if "%%b" neq "" echo %%b|clip seems to be superfluous then. Simple echo %%b|clip should suffice.



        Sample output:



        ==> D:batCodeReview179105.bat out.txt
        MD5 hash of out.txt
        D41D8CD98F00B204E9800998ECF8427E
        CertUtil bypassed for zero file size
        Press any key to continue . . .

        ==> D:batCodeReview179105.bat D:batCodeReview179105.bat
        MD5 hash of D:batCodeReview179105.bat:
        c2a4cabffac79a26ee5ed7c97cefb44b
        CertUtil: -hashfile command completed successfully.
        Press any key to continue . . .

        ==>





        share|improve this answer












        All zero-sized files will have the same checksum using the same given hash algorithm. Hence, use the following batch-script:



        @ECHO OFF
        SETLOCAL EnableExtensions
        for /f %%G in ("%~1") do set "_len=%%~zG"
        if %_len% EQU 0 (
        echo MD5 hash of %1
        echo D41D8CD98F00B204E9800998ECF8427E
        echo CertUtil bypassed for zero file size
        echo D41D8CD98F00B204E9800998ECF8427E|clip
        ) else (
        for /f "tokens=*" %%a in ('certutil -hashfile "%~1" MD5') do (
        echo %%a
        for /f "delims=" %%b in ('echo %%a^|findstr /r /i /x ^[0-9A-F]*[0-9A-F]$') do (
        if "%%b" neq "" echo %%b|clip
        )
        )
        )
        pause


        Note that %%~zG expands %%G to size of file (read call /?).



        if "%%b" neq "" echo %%b|clip seems to be superfluous then. Simple echo %%b|clip should suffice.



        Sample output:



        ==> D:batCodeReview179105.bat out.txt
        MD5 hash of out.txt
        D41D8CD98F00B204E9800998ECF8427E
        CertUtil bypassed for zero file size
        Press any key to continue . . .

        ==> D:batCodeReview179105.bat D:batCodeReview179105.bat
        MD5 hash of D:batCodeReview179105.bat:
        c2a4cabffac79a26ee5ed7c97cefb44b
        CertUtil: -hashfile command completed successfully.
        Press any key to continue . . .

        ==>






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 7 hours ago









        JosefZ

        22629




        22629






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Code Review Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f179105%2fcopying-a-file-hash-to-clipboard-without-powershell%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Morgemoulin

            Scott Moir

            Souastre