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

时间:2011-11-03 20:54:55

标签: string batch-file transliteration

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

a-b
b-c
c-d
d-e
e-f
etc etc etc

我查找字符串和其他变量技巧,但它不起作用。继承人我尝试了,你可以在“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键然后显示“批处理”

2 个答案:

答案 0 :(得分:1)

我修改了Andriy的代码,以获得使用Batch变量而不是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

但是,当编码特殊字符(无效变量名称)时,我的版本不起作用。

编辑我的代码与Andriy的唯一不同之处是:

  • setlocal EnableDelayedExpansion:除了%var%之外,还需要此命令才能使用!var!扩展,允许在同一命令中同时使用这两个扩展。
  • for /f "delims=" %%a in (codechart.txt) do set %%a:此命令会记录您的转化行,并对每个命令执行set命令,即set a=' set b=v等。这样,转化存储在批处理变量中,包含原始字符的名称和新字符的值。
  • if defined %ec% set dc=!%ec%!:此行通过直接替换转换ec变量中的字符。例如,如果ec是“b”:if defined b set dc=!b!;因为b变量存在且包含“v”,然后执行set dc=v

答案 1 :(得分:0)

嗯,这是一个你可以玩的工作脚本。它以文本文件的形式使用您的图表(在我的设置中名为codechart.txt):

@ECHO OFF
: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=?
FOR /F "delims==" %%C IN ('FIND "=%ec%" ^<codechart.txt') DO SET dc=%%C
SET decoded=%decoded%%dc%
GOTO decode

如果输入非空字符串,则会产生结果。点击输入而不实际输入任何内容将终止批次。如果在图表中找不到某个字符,它将在输出中表示为?