String 使用批处理逐个字符转换用户输入

String 使用批处理逐个字符转换用户输入,string,batch-file,transliteration,String,Batch File,Transliteration,好的,基本上我想要一个简单的批处理程序,以这样的方式将X字符更改为Y字符 a-b b-c c-d d-e e-f etc etc etc ive查找字符串和其他变量技巧,但它不起作用。这是我尝试过的,你可以在“codeb”上看到,我尝试了另一种方法 set /p code=[paste your code here] set code=%codea:~1% set /a %code:~2% %codeb% 这基本上是我尝试将所有输入字符拆分为单独变量的方法 如果你觉得……无聊,下面就是翻译的

好的,基本上我想要一个简单的批处理程序,以这样的方式将X字符更改为Y字符

a-b
b-c
c-d
d-e
e-f
etc etc etc
ive查找字符串和其他变量技巧,但它不起作用。这是我尝试过的,你可以在“codeb”上看到,我尝试了另一种方法

set /p code=[paste your code here]
set code=%codea:~1%
set /a %code:~2% %codeb%
这基本上是我尝试将所有输入字符拆分为单独变量的方法

如果你觉得……无聊,下面就是翻译的确切转换

a='
b=v
c=x
d=s
e=w
f=d
g=f
h=g
i=u
j=h
k=j
l=k
m=n
n=b
o=i
p=o
q=\
r=e
s=a
t=r
u=y
v=c
w=q
x=z
y=t
z=/

基本上,我应该能够将这个“v'rxg”粘贴到批处理中,然后按enter键,然后它会显示“batch”

好吧,这里有一个可以使用的工作脚本。它以文本文件的形式使用图表(在我的设置中名为
codechart.txt
):

@ECHO关闭
:循环
SET/P encoded=[在此处粘贴代码]
如果[%encoded%]=[]转到:EOF
解码集=
呼叫:解码
回波结果:
回音(%decoded%)
转到环路
:解码
如果[%encoded%]=[]转到:EOF
集合ec=%encoded:~0,1%
SET encoded=%encoded:~1%
设置dc=?

对于/F“delims==”%%C IN('FIND“=%ec%”)^我修改了Andrey的代码,以获得使用批处理变量而不是FIND文本文件的更快版本。如下所示:

@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%a in (codechart.txt) do set %%a
:loop
set /P encoded=[paste your code here]
if "%encoded%" == "" goto :eof
set decoded=
call :decode
echo Result:
echo\%decoded%
goto loop

:decode
if "%encoded%" == "" goto :eof
set ec=%encoded:~0,1%
set encoded=%encoded:~1%
set dc=?
if defined %ec% set dc=!%ec%!
set decoded=%decoded%%dc%
goto decode
但是,当对特殊字符(无效变量名)进行编码时,我的版本不起作用

编辑我的代码与安德烈的代码的唯一区别是:

  • setlocal EnableDelayedExpansion
    :除了%var%之外,还需要使用
    !var!
    扩展,以便在同一个命令中使用两个扩展
  • for/f“delims=“%%a in(codechart.txt)do set%%a
    :此命令获取转换行,并对每行执行
    set
    命令,即
    set a='
    set b=v
等。这样,转换存储在批处理变量中,包含原始字符的名称和新字符的值
  • 如果定义了%ec%set dc=!%ec%!
    :此行通过直接替换转换
    ec
    变量中的字符。例如,如果ec为“b”:
    如果定义了b set dc=!b!
    ;因为b变量存在并包含一个“v”,则执行
    set dc=v

  • 好的,要显示“批处理”,输入必须是“nsyvj”,否则上面显示的转换表表示相反的转换!也就是说,
    b=v
    的意思是:“在找到b的地方,放v”(b等于v)。不是吗?你说的是“将X字符改为Y字符”谢谢你提供的信息,能不能向我解释一下这些功能,因为我以前从未见过这些功能
    @echo off
    setlocal EnableDelayedExpansion
    for /f "delims=" %%a in (codechart.txt) do set %%a
    :loop
    set /P encoded=[paste your code here]
    if "%encoded%" == "" goto :eof
    set decoded=
    call :decode
    echo Result:
    echo\%decoded%
    goto loop
    
    :decode
    if "%encoded%" == "" goto :eof
    set ec=%encoded:~0,1%
    set encoded=%encoded:~1%
    set dc=?
    if defined %ec% set dc=!%ec%!
    set decoded=%decoded%%dc%
    goto decode