2011-07-26 2 views
2

バッチスクリプトで文字列のsha256ハッシュを生成しようとしています。バッチスクリプトに文字列とCRまたはLFを含まないファイルを作成します。

sha256sum.exe(link) このアプリケーションはファイル引数のみを受け入れます。

このように、文字列と後続のスペースやCRやLFのないファイルを作成する必要があります。

は私がやった私のバッチスクリプトで:

echo.|set /P =%var%>temp.txt 
sha256sum temp.txt > temp2.txt 

私はその後、sha256sum.exeで使用される単一の末尾のスペース文字を参照してくださいTEMP.TXTファイルにただしCR & LFを除去するための最初の行を使用しました。

私はテキストファイルの最初の行の最後に後続の空白文字を取り除こうとしています。

私はLinuxユーザーです。このような単純なことは問題ではないと私は思いました。 ありがとうございます。

+0

をあなたはGnuWin32またはUnxUtilsを使用して、使用することができ、次のいずれか '吹け|カット-b 1- |例えば「rev」や「sed」s /.$//「 'などです。バッチスクリプトは、それらのツールを使用できない場合は非常に苦痛です。すべての空白ではなく、TRAILING空白を削除するのは本当に難しい作業です。変数の内容の長さを得る組み込み関数さえありません。 – Benoit

+0

現在、私は可能ならば別のツールなしでこれをやろうとしています。この場合、文字列に最後のスペース以外のスペースが含まれていないため、すべての空白を削除することも有効です。 – eaykin

答えて

2

すべての空白を置き換えるのが最も簡単なことです。

set h=0x0C29A1BCD3DC8425712A0107B6693361CCBBABAC 
echo."%h%" 
set h=%h: =% 
echo."%h%" 

>> "0x0C29A1BCD3DC8425712A0107B6693361CCBBABAC " 
>> "0x0C29A1BCD3DC8425712A0107B6693361CCBBABAC" 

編集

申し訳ありませんが、私は余分なスペースを実現didntの程度

@echo off 
set var=hashme 
for %%a in (%var%) do (
echo/|set /p ="%%a" 
)>temp.txt 

FOR /F "tokens=1" %%i in ('sha1sum temp.txt') do SET var=%%i 
echo "%var:~0,-1%" 

が、私はそれは、sha1sum.exeをダウンロードして"hashme"のために出力が正しいか書き込まれた値、にありました;

"fb78992e561929a6967d5328f49413fa99048d06" 
+0

私はCR LFを削除するために使用する上記のコードの最初の行にこのコマンドをどのように組み込むことができますか? – eaykin

+0

上記の例を更新しました –

+0

tmp2.txtではなく、tmp.txtの行の最後にスペースが残っていることがわかります。私はあなたのソリューションを使用する場合、temp.txtにスペースがあり、sha256sumが間違った結果を生成するため、動作しません。 – eaykin

0

あなたが行うことができます。

set /p =%var%>temp.txt <NUL 

の代わり:

echo.|set /P =%var%>temp.txt 
関連する問題