我已經找到了許多方法來base64使用Windows上的命令行編碼整個文件,但我似乎無法找到一種簡單的方法來使用命令行實用程序批量編碼只是一個「字符串」。Base64編碼「字符串」 - 命令行Windows?
如何做到這一點,例如在批處理文件中使用?
我已經找到了許多方法來base64使用Windows上的命令行編碼整個文件,但我似乎無法找到一種簡單的方法來使用命令行實用程序批量編碼只是一個「字符串」。Base64編碼「字符串」 - 命令行Windows?
如何做到這一點,例如在批處理文件中使用?
這裏是你可以從一個cmd控制檯運行PowerShell的一班輪那會Base64編碼一種條形碼G。
powershell "[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes(\"Hello world!\"))"
它可能沒有npocmaka的解決方案一樣快,但你可以set a console macro with it。
doskey btoa=powershell "[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes(\"$*\"))"
doskey atob=powershell "[Text.Encoding]::UTF8.GetString([convert]::FromBase64String(\"$*\"))"
btoa Hello world!
btoa This is fun.
btoa wheeeeee!
atob SGVsbG8gd29ybGQh
請注意,doskey
不能在批處理腳本中工作 - 只有控制檯。如果你想在批處理腳本中使用它,請創建一個函數。
@echo off
setlocal
call :btoa b64[0] "Hello world!"
call :btoa b64[1] "This is fun."
call :btoa b64[2] "wheeeeee!"
call :atob b64[3] SGVsbG8gd29ybGQh
set b64
goto :EOF
:btoa <var_to_set> <str>
for /f "delims=" %%I in (
'powershell "[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes(\"%~2\"))"'
) do set "%~1=%%I"
goto :EOF
:atob <var_to_set> <str>
for /f "delims=" %%I in (
'powershell "[Text.Encoding]::UTF8.GetString([convert]::FromBase64String(\"%~2\"))"'
) do set "%~1=%%I"
goto :EOF
或者如果你願意批+ JScript的混合:
@if (@[email protected]) @then
@echo off & setlocal
call :btoa b64[0] "Hello world!"
call :btoa b64[1] "This is fun."
call :btoa b64[2] "wheeeeee!"
call :atob b64[3] SGVsbG8gd29ybGQh
set b64
goto :EOF
:btoa <var_to_set> <str>
:atob <var_to_set> <str>
for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0" %0 "%~2"') do set "%~1=%%I"
goto :EOF
@end // end batch/begin JScript hybrid code
var htmlfile = WSH.CreateObject('htmlfile');
htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=10" />');
WSH.Echo(htmlfile.parentWindow[WSH.Arguments(0).substr(1)](WSH.Arguments(1)));
編輯:批量+ VBScript中混合了@Hackoo:
<!-- : batch portion
@echo off & setlocal
call :btoa b64[0] "Hello world!"
call :btoa b64[1] "This is fun."
call :btoa b64[2] "wheeeeee!"
call :atob b64[3] SGVsbG8gd29ybGQh
set b64
goto :EOF
:btoa <var_to_set> <str>
:atob <var_to_set> <str>
for /f "delims=" %%I in ('cscript /nologo "%~f0?.wsf" %0 "%~2"') do set "%~1=%%I"
goto :EOF
: VBScript -->
<job>
<script language="VBScript">
Set htmlfile = WSH.CreateObject("htmlfile")
htmlfile.write("<meta http-equiv='x-ua-compatible' content='IE=10' />")
if WSH.Arguments(0) = ":btoa" then
WScript.Echo htmlfile.parentWindow.btoa(WSH.Arguments(1))
else
WScript.Echo htmlfile.parentWindow.atob(WSH.Arguments(1))
end if
</script>
</job>
This script可以解碼/編碼的base64串從XP每臺機器上和上面而不需要安裝.NET或Internet Explorer 10/11.It甚至可以處理特殊的javascript轉義符號:
// result is IkhlbGxvIg==
base64.bat -encode "\u0022Hello\u0022" -eval yes
// result is SGVsbG8=
base64.bat -encode "Hello"
這一個接受一個參數 - 要編碼爲基礎64和字符串輸出結果(但需要至少安裝的Internet Explorer 10):
@echo off
setlocal
set "string=%~1"
::echo %string%^|mshta.exe "%~f0"
for /f "delims=" %%# in ('echo %string%^|mshta.exe "%~f0"') do (
set b64=%%#
)
set b64
endlocal&exit /b %errorlevel%
<HTA:Application
ShowInTaskbar = no
WindowsState=Minimize
SysMenu=No
ShowInTaskbar=No
Caption=No
Border=Thin
>
<meta http-equiv="x-ua-compatible" content="ie=10" />
<script language="javascript" type="text/javascript">
window.visible=false;
window.resizeTo(1,1);
var fso= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);
var fso2= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0);
var string=fso2.ReadLine();
var encodedString = btoa(string);
fso.Write(encodedString);
window.close();
</script>
如何使用'>「%TEMP%\ EncodeBase64.tmp」echo string'將字符串寫入臨時文件,然後使用實用程序對臨時文件「%TEMP%\ EncodeBase64.tmp」進行編碼,然後讀取(「%TEMP%\ EncodeBase64.tmp」)中設置「StringVariable = %% I」,最後使用del命令刪除臨時文件。 %TEMP%\ EncodeBase64.tmp「'? – Mofi
有沒有聽說過'CertUtil.exe',Windows的本地工具與許多有用的動詞?例如,'CertUtil -encode'和'CertUtil -decode'將文件編碼/解碼到/從Base64解碼; (也有幫助:'CertUtil -hashfile [{SHA1 | MD5}]'計算一個文件的散列值...) - 用一個臨時文件,你也可以處理字符串... – aschipfl
其中一個你們都需要發佈'certutil'解決方案作爲答案。 – rojo