2011-07-26 67 views
2

我試圖在批處理腳本中生成一個字符串的sha256哈希。在批處理腳本中創建一個包含字符串且不包含CR或LF的文件

爲此,我找到了sha256sum.exe(link) 此應用程序僅接受文件參數。

因此,我需要創建一個文件的字符串,沒有尾隨空間,也沒有CR或LF。

在我的批處理腳本

我所做的:

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

我使用的第一線,在TEMP.TXT文件我看到一個尾隨空格字符,然後使用sha256sum.exe & LF但是除去CR 。

我想擺脫尾隨空格字符在文本文件的第一行結束。

我是一個Linux用戶,我並不期待這樣一個簡單的事情成爲一個問題。 在此先感謝。

+0

您可以使用的GnuWin32或UnxUtils,然後使用:'轉| cut -b 1- |例如,rev'或'sed「s /.$//」'。如果您不能使用這些工具,批處理腳本非常痛苦。刪除TRAILING空格,並非所有的空格都是非常困難的。甚至沒有內建函數來獲取變量內容的長度。 – Benoit

+0

目前我正在嘗試在沒有其他工具的情況下做到這一點,如果可能的話。在這種情況下,刪除所有空格也是有效的,因爲該字符串不包含除末尾之外的任何空格。 – eaykin

回答

2

最簡單的事情就是替換所有的空格;

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

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

編輯

對不起,我沒有意識到的額外空間是在寫入值,如何

@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

我應該說明我在tmp.txt中的行末尾看到尾部空格,而不是在tmp2.txt中。如果我使用你的解決方案,它不起作用,因爲temp.txt有它的空間,並且sha256sum產生錯誤的結果。 – eaykin

0

你可以這樣做:

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

代替:

echo.|set /P =%var%>temp.txt 
相關問題