web-dev-qa-db-ja.com

DIRからCERTUTILへのパイプ出力

Win10では、コマンドプロンプトまたはバッチファイルでDIRコマンドからの出力をパイプ処理して、CERTUTILコマンドへの入力として機能させる方法を探しています。 IOW、DIRコマンドで一致したすべてのファイルのMD5ハッシュを取得したいと思います。

次のコマンドは、E:\ Tempフォルダー内のすべてのファイルのベアリストを生成します。

C:\Users\RAS>dir "E:\Temp" /b

しかし、次のコマンドに示すようにそれをパイプすると、エラーメッセージが表示されます。

C:\Users\RAS>dir "E:\Temp" /b | CertUtil -hashfile %~f1 MD5
CertUtil: -hashfile command FAILED: 0x80070002 (WIN32: 2 ERROR_FILE_NOT_FOUND)
CertUtil: The system cannot find the file specified.

Windows Vistaのdir出力をattribコマンドにパイプする でのuser1686の回答は、一部のコマンド(ATTRIBなど)がファイル名を入力として受け取らないことを示していますが、ここでは関係ないと思います。

クリフアームストロングによる 文字列のハッシュを取得し、最終的にハッシュと比較する の答えは有望に見えますが、完全修飾ファイル名をCERTUTILに渡す方法がわかりません。また、PowerShellの経験がないので、可能であればバッチファイルを使用して解決策を入手したいと思います。

ありがとうございました、

DW

2
Dee Wolf

DirCertUtilを使用するための正しい引数に自分の出力を配置せず、CertUtilDirリダイレクトされた入力を正しい場所に配置しないことを考慮してください(正しい位置/引数の順序)を使用します。

_for /f_の代わりにwhereコマンドで_dir /b_ループを使用しようとすると(完全なファイルパスにはなりません)、これにより完全なファイルパスになり、 Certutilで出力ループ変数を使用できます。

  • コマンドライン:
_for /f tokens^=* %i in ('%__APPDIR__%where.exe "E:\Temp:*.*"')do @%__APPDIR__%CertUtil.exe -hashfile "%~i" MD5

rem :: Output  :: 

MD5 hash of E:\Temp\Turn Off LCD.exe:
3657b64bfa767cd1ce1ea3709053ea3b
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\LngVar.exe:
fc82a6b8fa5c24f6cbcb0f0dcbf85a2e
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\cocolor.exe:
d9a3def8f569afda41fb6e067c5f3df3
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\aria2c.exe:
80f598187166a8f95d86985ba0244257
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\cmdFocus.exe:
f90f8672fa57ba4e8f0a05dec3ede654
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\where.exe:
7b6f5b80b4db4ca0c0472625bcd0c981
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\SaveColor.exe:
0b24aa776ca4601bb39e6e529e73e7a6
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\Windows-ISO-Downloader.exe:
11532e016f68ef22ca96fa03020de789
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\sudoku.exe:
a3a946be19763b72f8aab6387079207a
CertUtil: -hashfile command completed successfully._
  • Bat/cmdファイルでも同じです:
_@echo off  

for /f tokens^=* %%i in ('%__APPDIR__%where.exe "E:\Temp:*.*
')do %__APPDIR__%CertUtil.exe -hashfile "%%~i" MD5"

rem :: Output :: 
MD5 hash of E:\Temp\Turn Off LCD.exe:
3657b64bfa767cd1ce1ea3709053ea3b
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\LngVar.exe:
fc82a6b8fa5c24f6cbcb0f0dcbf85a2e
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\cocolor.exe:
d9a3def8f569afda41fb6e067c5f3df3
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\aria2c.exe:
80f598187166a8f95d86985ba0244257
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\cmdFocus.exe:
f90f8672fa57ba4e8f0a05dec3ede654
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\where.exe:
7b6f5b80b4db4ca0c0472625bcd0c981
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\SaveColor.exe:
0b24aa776ca4601bb39e6e529e73e7a6
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\Windows-ISO-Downloader.exe:
11532e016f68ef22ca96fa03020de789
CertUtil: -hashfile command completed successfully.
MD5 hash of F:\sudoku.exe:
a3a946be19763b72f8aab6387079207a
CertUtil: -hashfile command completed successfully._

出力にMD5文字列のみが必要な場合は、_|find/v ":"_を追加します。

  • コマンドライン:
_@for /f tokens^=* %i in ('%__APPDIR__%where.exe "E:\Temp:*.*"')do @%__APPDIR__%CertUtil.exe -hashfile "%~i" MD5|find/v ":"

rem :: Output  :: 

3657b64bfa767cd1ce1ea3709053ea3b
fc82a6b8fa5c24f6cbcb0f0dcbf85a2e
d9a3def8f569afda41fb6e067c5f3df3
80f598187166a8f95d86985ba0244257
f90f8672fa57ba4e8f0a05dec3ede654
7b6f5b80b4db4ca0c0472625bcd0c981
0b24aa776ca4601bb39e6e529e73e7a6
11532e016f68ef22ca96fa03020de789
a3a946be19763b72f8aab6387079207a_
  • Bat/cmdファイル:
_@echo off 

for /f tokens^=* %%i in ('%__APPDIR__%where.exe "E:\Temp:*.*"
')do %__APPDIR__%CertUtil.exe -hashfile "%%~i" MD5|find/v ":"

rem :: Output  :: 

3657b64bfa767cd1ce1ea3709053ea3b
fc82a6b8fa5c24f6cbcb0f0dcbf85a2e
d9a3def8f569afda41fb6e067c5f3df3
80f598187166a8f95d86985ba0244257
f90f8672fa57ba4e8f0a05dec3ede654
7b6f5b80b4db4ca0c0472625bcd0c981
0b24aa776ca4601bb39e6e529e73e7a6
11532e016f68ef22ca96fa03020de789
a3a946be19763b72f8aab6387079207a_

For/rを使用して、より単純かつ再帰的に行うこともできます。これは、likeリンクされた質問:で使用されます。

  • コマンドライン:
@for /r E:\temp %i in (*)do @%__APPDIR__%CertUtil.exe -hashfile "%~i" MD5|find/v ":"
  • Bat/cmdファイル:
_@echo off 

for /r E:\temp %%i in (*)do %__APPDIR__%CertUtil.exe -hashfile "%%~i" MD5|find/v ":"_

1
It Wasn't Me