gpt4 book ai didi

batch-file - 带延迟变量扩展的批处理文件 - URL 编码 - 等号 - RSA token 转换器

转载 作者:行者123 更新时间:2023-12-04 16:30:05 28 4
gpt4 key购买 nike

我正在自动执行 RSA 软 token 转换并将转换字符串传递给 Outlook。我意识到我无法使用批处理将字符串变成 URL 到 outlook 命令行,但这不是我的问题。我的问题是将讨厌的等号转换为它的 URL 编码等效符号“%3D”。

@echo off
setlocal enableDelayedExpansion

set /p fname=Enter the Filename:
set /p pss=Enter the encryption pass:

IF NOT EXIST "%fname%".sdtid (
echo File Not Found! Closing...
PING 1.1.1.1 -n 4 >NUL
exit
)

echo File Found! starting process...

REM tokenconverter %fname%.sdtid -iphone >> temp_batch.txt
tokenconverter %fname%.sdtid -p %pss% -iphone >> temp_batch.txt

set /p result= < temp_batch.txt
DEL temp_batch.txt
REM %result% | clip

set "stringclean1=!result:?=%%3F!"
set "stringclean2=!stringclean1::=%%3A!"
set "stringclean3=!stringclean2:/=%%2F!"

以下行未能对等号进行编码:

 set "stringclean4=!stringclean3:==%%3D!"

我试过:

 set "stringclean4=!stringclean3:=^=%%3D!"
set "stringclean4=!stringclean3:=%=%%3D!"

然而,等号仍未编码。

echo Piping over to outlook..
REM passing stringclean3 since stringclean4 no worky.
pushd "C:\Program Files\Microsoft Office\Office12"
outlook.exe /c ipm.note /m "&subject=TEsT&body=%stringclean3%"

使用延迟变量扩展对等号进行 URL 编码的正确方法是什么?

如有任何帮助,我们将不胜感激。提前致谢。

最佳答案

抱歉,批量替换 = 的简单解决方案根本不存在 :-(

关于使用纯批处理,您可以做的最好的事情是逐个字符地遍历字符串,并根据需要进行替换。

这是一个蛮力解决方案,有一定的优化空间。但它已经足够好了。它首先检查 = 是否存在,然后再对 = 进行编码。

:: test if string contains =
:: only take the time to encode = if it exists
set "test=a!stringClean3!"
for /f "delims=" %%S in ("!test!") do if /i "!test:%%S=%%S!" neq "!test!" (

:: compute length of string - 1
set end=0
for /l %%A in (12,-1,0) do (
set /a "end|=1<<%%A"
for %%B in (!end!) do if "!stringClean3:~%%B,1!"=="" set /a "end&=~1<<%%A"
)

:: replace = with %3D
for /l %%N in (0 1 !end!) do (
if "!stringClean3:~%%N,1!" equ "=" (
set "stringClean4=!stringClean4!%%3D"
) else (
set "stringClean4=!stringClean4!!stringClean3:~%%N,1!"
)
)

) else set stringClean4=!stringClean3!


编辑

这是另一种完全不同的方法,它使用 CERTUTIL 将字符串编码和解码为十六进制。对十六进制字符串进行编码是一件简单的事情。我不认为 CERTUTIL 是随 XP 一起提供的。我不记得了,但 CERTUTIL 语法可能会根据 Windows 版本略有变化。我在 Vista 上开发和测试了这个。

set "tempFile=%temp%\replaceEqual%random%"

(>"%tempFile%.before" echo(!stringClean3!)
certutil -encodehex "%tempFile%.before" "%tempFile%.hex" >nul
>"%tempFile%.hex2" (
for /f "usebackq tokens=1*" %%A in ("%tempFile%.hex") do (
set ln=%%B
set "ln=!ln:~0,48!"
(echo !ln:3d=25 33 44!)
)
)
certutil -decodehex "%tempFile%.hex2" "%tempFile%.after" >nul
<"%tempFile%.after" set /p "stringClean4="
del "%tempFile%.*"

使用 SET/P 读取结果会导致以下限制:

  • 字符串的长度必须小于或等于 1021 个字符。
  • 字符串不得以控制字符结尾(尾随控制字符被去除)
  • 字符串不能包含换行符

可以使用 FOR/F 读取结果,但是当 FOR 变量被扩展时,延迟扩展将破坏任何 !

关于batch-file - 带延迟变量扩展的批处理文件 - URL 编码 - 等号 - RSA token 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260923/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com