2

好的,基本上我想要一个简单的批处理程序以这样的方式将 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”“粘贴”到批处理中并按回车键,然后显示“批处理”

4

2 回答 2

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.
于 2011-11-04T00:58:02.247 回答
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

如果您输入一个非空字符串,它将产生一个结果。在没有实际输入任何内容的情况下点击Enter将终止批处理。如果在图表中找不到字符,它将?在输出中表示为 a。

于 2011-11-03T23:58:55.897 回答