2011-11-03 61 views
2

确定basicly我希望有一个简单的批处理程序更改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”进料和精确的转换回车,它然后显示“批”

+0

那么,要显示“批”输入必须是“nsyvj”,否则上面显示的转换表代表相反的转换!也就是说,'b = v'的意思是:“你在哪找到b,放v”(b等于v)。不是吗?您说“将X字符更改为Y字符” – Aacini

回答

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 

如果你输入一个非空字符串,它会产生一个结果。打到输入而实际上没有输入任何内容会终止批处理。如果在图表中找不到字符,则在输出中将显示为?

1

我修改了Andriy的快速版本代码,它使用批量变量而不是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等等这种方式,转换存储在批处理变量与原始字符的名称和值新角色。
  • if defined %ec% set dc=!%ec%!:该行通过直接替换来转换ec变量中的字符。例如,如果ec是“b”:if defined b set dc=!b!;因为b变量存在且包含“v”,则执行set dc=v
+0

感谢您提供的信息,是否可以向我解释这些功能,因为我从未见过这些功能 –

相关问题