2011-01-10 203 views
2

轉換爲二進制文件,以十六進制表示,我需要一個DLL文件轉換爲十六進制表示將它作爲字符串的一部分,以創建SQL Server組件,這樣使用批處理文件

CREATE ASSEMBLY [AssemblyNameHere]
FROM 0x4D5A90000300000004000000FFFF000......continue binary data
WITH PERMISSION_SET = EXTERNAL_ACCESS

我需要這在批處理文件中有很多原因,但似乎FOR聲明只適用於文本文件。

回答

3

用純批量創建十六進制輸出並不是一個好主意。

但你可以使用VBScript或簡單的任務FC.exe可以工作。

@echo off 
SETLOCAL EnableDelayedExpansion 
set filesize=%~z1 
set "hexVal=41" 
set "x10=AAAAAAAAAA" 

set /a chunks=1+filesize/10 

del dummy.txt 2>nul > nul 
for /L %%n in (0,1,%chunks%) DO (
    <nul >> dummy.txt set /p ".=%x10%" 
) 

set /a expectedNum=0 
for /F "eol=F usebackq tokens=1,2 skip=1 delims=:[] " %%A in (`fc /b "%~dpf1" dummy.txt`) DO (
    set /a num=0x%%A && (
      set /a numDec=num-1 
     set "hex=%%B" 

     for /L %%n in (!expectedNum!=,=1 !numDec!) DO (
      echo %hexVal% 
     ) 
     set /a expectedNum=num+1 
     echo !hex! 
    ) 
) 

首先我創建具有(接近)相同長度的文件,然後我在二進制模式(/ B),輸出被掃描並且如果檢測到一個線路missings,它們填充有FC比較它們與x10字符串的hexVal(在這種情況下,0x41 ='A')。

+0

謝謝,這個完美的作品,但是當你提到的VBScript它太慢了比較大的文件(36KB),順便說一句您的意思是否有一個命令行方式調用腳本? – 2011-01-10 17:07:29

+0

您可以像這樣的`CSCRIPT MyScript.vbs`從批處理文件中調用VBScript。 – aphoria 2011-01-10 18:10:10

2

最簡單的方法是用CERTUTIL命令:

certutil -encodehex c:\myfile.dll myfile.hex