'================================================================== '「送る」に「MD5-SHA1-SHA256 照合」のショートカットを作りますYO! 'http://www10.plala.or.jp/palm84/wsh.html 'http://palm84.hatenablog.com/entry/20150909/1441742511 'http://www10.plala.or.jp/palm84/archives/wsh/Create_Check_MD5_SHA1_File-sendto.vbs.txt 'https://eu7w9wsmf6a74xyjdfzl3q-on.drv.tw/archives/wsh/Create_Check_MD5_SHA1_File-sendto.vbs.txt '================================================================== '最終更新 2022.09.26 Windows 11 向けアイコン変更 '更新 2020.05.30 SHA256 追記 '更新 2019.08.19 SHA1判定についてちょっと修正すみません! '更新 2019.08.14 Windows 8 対応? '更新 2018.05.03 '2017.03.08 複数行がだめだったので修正。すみません! '2017.02.19 感嘆符 [!] を含むファイル名に対応 '2017.02.18 間違い修正しました(37行目行末に引用符 " なし) '================================================================== 'Shell オブジェクトを作成 Set objShell = WScript.CreateObject("WScript.Shell") 'FileSystemObject オブジェクトを作成 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const Reg_ProductName = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName" Const Reg_ReleaseId = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ReleaseId" Const Reg_CurrentBuildNumber = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber" Title = "MD5-SHA1-SHA256 照合" MyKakunin '*** 環境変数とか取得 *** SendTo = objShell.SpecialFolders("SendTo") If objShell.RegRead(Reg_CurrentBuildNumber) >= "22000" Then myOS = "Windows 11" Else myOS = objShell.RegRead(Reg_ProductName) End IF If InStr(myOS, "Windows 10") > 0 Then myReleaseId = objShell.RegRead(Reg_ReleaseId) End If '*** ショートカット設定 *** strFile = SendTo & "\Check_MD5_SHA1_File-sendto.bat" strWorkingDirectory = "" strIcon = "%SystemRoot%\system32\shell32.dll, 310" If myOS = "Windows 11" Then strIcon = "%SystemRoot%\system32\shell32.dll, 310" If InStr(myOS, "Windows 10") > 0 Then strIcon = "%SystemRoot%\system32\shell32.dll, 311" If myReleaseId >= "1703" Then strIcon = "%SystemRoot%\system32\shell32.dll, 312" If InStr(myOS, "Windows 7") > 0 Then strIcon = "%SystemRoot%\system32\shell32.dll, 284" strFolder = SendTo If objFSO.FileExists(strFile) Then objFSO.DeleteFile(strFile) Set objTxt = objFSO.OpenTextFile(strFile, ForWriting, true, -2) With objTxt .WriteLine "@echo off" .WriteLine "title %~nx0" .WriteLine "REM ********************************************************************" .WriteLine "REM * 右クリック【送る】から MD5-SHA1 照合" .WriteLine "REM http://www10.plala.or.jp/palm84/commandline.html" .WriteLine "REM http://palm84.hatenablog.com/entry/20150909/1441742511" .WriteLine "REM ********************************************************************" .WriteLine "if ""%~1""=="""" GOTO NO_PARAM" .WriteLine "for %%x in (""%~a1"") do set check_dir=%%~x" .WriteLine "if /i ""%check_dir:~0,1%""==""d"" GOTO FILECYAU" .WriteLine "" .WriteLine "for /f ""usebackq delims="" %%I in (""%~1"") do (" .WriteLine "if not defined file_test set ""file_test=%%I"")" .WriteLine "if ""%file_test:~32,2%""=="" "" set MD=MD5" .WriteLine "if ""%file_test:~32,2%""=="" *"" set MD=MD5" .WriteLine "if ""%file_test:~40,2%""=="" "" set MD=SHA1" .WriteLine "if ""%file_test:~40,2%""=="" *"" set MD=SHA1" .WriteLine "if ""%file_test:~64,2%""=="" "" set MD=SHA256" .WriteLine "if ""%file_test:~64,2%""=="" *"" set MD=SHA256" .WriteLine "if not defined MD GOTO HENNIDA" .WriteLine "" .WriteLine "pushd %~dp0" .WriteLine "for /f ""delims="" %%I in (""certutil.exe"") do set exe_certutil=%%~$PATH:I" .WriteLine "if not defined exe_certutil GOTO NOFILE" .WriteLine "" .WriteLine "" .WriteLine "REM #####################################" .WriteLine "REM ### Check" .WriteLine "REM #####################################" .WriteLine ":Check" .WriteLine "echo:" .WriteLine "echo ==============================================================" .WriteLine "echo * 計算しまーす... *" .WriteLine "echo ==============================================================" .WriteLine "echo:" .WriteLine "pushd %~dp1" .WriteLine "echo ディレクトリ %cd%" .WriteLine "echo:" .WriteLine "echo ==============================================================" .WriteLine "" .WriteLine ":JOB" .WriteLine "if ""%~1""=="""" GOTO END" .WriteLine "set ""TXTfile=%~1""" .WriteLine "for /f ""usebackq tokens=1,* delims=* "" %%x in (""%TXTfile%"") do (" .WriteLine "set ""value=%%x""" .WriteLine "set ""filename=%%y""" .WriteLine "call :SUB" .WriteLine ")" .WriteLine "" .WriteLine "shift" .WriteLine "GOTO JOB" .WriteLine "" .WriteLine "REM #####################################" .WriteLine "REM ### SUB" .WriteLine "REM #####################################" .WriteLine ":SUB" .WriteLine "set check=" .WriteLine "if not exist ""%filename%"" (" .WriteLine "echo ファイル名: ""%filename%""" .WriteLine "echo:" .WriteLine "echo !ERROR! チェック指定ファイルがありませぬ....orz" .WriteLine "echo ==============================================================" .WriteLine "exit /b" .WriteLine ") else (" .WriteLine "echo ファイル名: ""%filename%""" .WriteLine "for /f ""usebackq delims="" %%x in (`certutil -hashfile ""%filename%"" %MD% ^| findstr /v "":""`) do (" .WriteLine "set ""check=%%x""" .WriteLine "))" .WriteLine "" .WriteLine "set ""check=%check: =%""" .WriteLine "" .WriteLine "if /i ""%value%""==""%check%"" (" .WriteLine "echo * OK ^(%MD%^): %check%" .WriteLine "echo ==============================================================" .WriteLine ") else (" .WriteLine "echo !ERROR!" .WriteLine "echo 照合値^(%MD%^): %value%" .WriteLine "echo 計算値^(%MD%^): %check%" .WriteLine "echo ==============================================================" .WriteLine ")" .WriteLine "" .WriteLine "exit /b" .WriteLine "" .WriteLine "REM #####################################" .WriteLine "REM ### NO_PARAM" .WriteLine "REM #####################################" .WriteLine ":NO_PARAM" .WriteLine "echo:" .WriteLine "echo ==============================================================" .WriteLine "echo !引数(ファイル指定)がないですYO!" .WriteLine "echo ==============================================================" .WriteLine "echo:" .WriteLine "GOTO END" .WriteLine "" .WriteLine "REM #####################################" .WriteLine "REM ### NOFILE" .WriteLine "REM #####################################" .WriteLine ":NOFILE" .WriteLine "echo:" .WriteLine "echo ==============================================================" .WriteLine "echo !certutil.exe がありませぬ...." .WriteLine "echo ==============================================================" .WriteLine "echo:" .WriteLine "GOTO END" .WriteLine "" .WriteLine "REM #####################################" .WriteLine "REM ### FILECYAU" .WriteLine "REM #####################################" .WriteLine ":FILECYAU" .WriteLine "echo:" .WriteLine "echo ==============================================================" .WriteLine "echo ! %~1 " .WriteLine "echo:" .WriteLine "echo ! ... はディレクトリどすえ" .WriteLine "echo ==============================================================" .WriteLine "GOTO END" .WriteLine "" .WriteLine "REM #####################################" .WriteLine "REM ### HENNIDA" .WriteLine "REM #####################################" .WriteLine ":HENNIDA" .WriteLine "echo:" .WriteLine "echo ==============================================================" .WriteLine "echo ! %~1 " .WriteLine "echo:" .WriteLine "echo ! ... 照合用ファイルがヘンニダ!です" .WriteLine "echo ==============================================================" .WriteLine "GOTO END" .WriteLine "" .WriteLine "REM #####################################" .WriteLine "REM ### END" .WriteLine "REM #####################################" .WriteLine ":END" .WriteLine "echo:" .WriteLine "echo *** 何かキーを押すと閉じます *** " .WriteLine "pause >nul" .Close End With Set objFile = objFSO.GetFile(strFile) objFile.Attributes = objFile.Attributes + 2 MySC OldTitle = "MD5-SHA1 照合" MyDeleteFile MsgBox "「送る」に「" & Title & "」のショートカットを作成しました YO!",64 ,"(´・ω・`) クマー! " Set objTxt = Nothing Set objShortCut = Nothing Set objFile = Nothing Set objFSO = Nothing Set objShortcut = Nothing Set objShell = Nothing '********************************************************* 'Sub MyKakunin '********************************************************* Sub MyKakunin Kakunin = MsgBox ("「送る」 に 「" & Title & "」 のショートカットを作りますのん? (´・ω・`)", 65 ,"「送る」 に 「" & Title & "」 のショートカットを作るYO! (´・ω・`) ") If Kakunin = 2 Then WScript.Quit End If End Sub '********************************************************* 'Sub MySC '********************************************************* Sub MySC strShortCut = SendTo & "\" & Title & ".lnk" '*** ショートカットオブジェクトを作成 *** Set objShortCut = objShell.CreateShortcut(strShortCut) With objShortCut ' リンク先 .TargetPath = strFile ' 作業フォルダ .WorkingDirectory = strWorkingDirectory ' 引数 .Arguments = "" ' コメント .Description = "" ' アイコン .IconLocation = strIcon End With objShortCut.Save ' ショートカットを DeskTop へコピー ' objFSO.CopyFile strShortCut, DeskTop & "\" 'WScript.Echo strFileName & "にショートカットを作成しました。" End Sub '********************************************************* 'Sub MyDeleteFile '********************************************************* Sub MyDeleteFile strShortCut = Sendto & "\" & OldTitle & ".lnk" 'ファイルが存在するなら削除 If objFSO.FileExists(strShortCut) Then objFSO.DeleteFile(strShortCut) End If End Sub