windows - شرح - how to save as batch file




Base64 ترميز "سلسلة"-سطر الأوامر ويندوز؟ (2)

وفقا للتعليقات على هذا السؤال، يمكنك استخدام سيرتوتيل . على سبيل المثال،

certutil -encode raw.txt encoded.txt

أو

certutil -f -encode raw.txt encoded.txt

-f يعني "قوة الكتابة". وإلا سوف تحصل على خطأ إذا كان ملف الإخراج (encoded.txt أعلاه) موجود بالفعل.

ومع ذلك، سيقوم هذا بتنسيق الإخراج في ملف encoded.txt كما لو كان ملف بيم شهادة، مع استكمال بيجين و إند خطوط، وخطوط الانقسام في حرف كحد أقصى. لذلك سوف تحتاج إلى القيام بمعالجة إضافية في سيناريو دفعة، وقليلا من العمل الإضافي إذا كانت السلاسل طويلة على الإطلاق.

لقد وجدت العديد من الطرق ل base64 ترميز الملفات كلها باستخدام سطر الأوامر على ويندوز، ولكن لا أستطيع أن يبدو أن تجد طريقة بسيطة لترميز دفعة فقط "سلسلة" باستخدام أداة سطر الأوامر.

كيف يمكن للمرء القيام بذلك، لاستخدامها في ملف دفعي على سبيل المثال؟


وهنا بايرشيل بطانة واحدة يمكنك تشغيل من وحدة تحكم كمد التي سوف Base64 ترميز سلسلة.

powershell "[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes(\"Hello world!\"))"

ربما لا بأسرع حل نبوكماكا، ولكن هل يمكن تعيين الماكرو وحدة التحكم معها .

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 أن 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

أو إذا كنت تفضل دفعة + جسكريبت الهجين:

@if (@CodeSection==@Batch) @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)));

تحرير: دفعة + فسكريبت الهجين ل @ هاكو :

<!-- : 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>






batch-file