使用批处理脚本将字母更改为其数字对应项

时间:2013-08-22 09:56:31

标签: batch-file for-loop

我正在尝试创建一个批处理文件,该文件会更改某些输入文本,并将其更改为a=1b=2c=3等对应的数字,例如:

@echo off

set /p text=

echo :: %text% ::
echo Is this the expected text? //user can manually typo check
pause
cls

for /f delims=: %%i in ("%text%") do ( 
[something that changes the letters into numbers & store in variable]
)

::do stuff to numbers

2 个答案:

答案 0 :(得分:4)

这可以使用cmd脚本语言的关联数组来完成:

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
SET "text=This is my zero text example"
SET "alfa=0abcdefghijklmnopqrstuvwxyz"
FOR /l %%x IN (1,1,26) DO SET "$!alfa:~%%x,1!=%%x"
SET /a count=0
:loop
SET "char=!text:~%count%,1!"
SET "code=!$%char%!
SET /a count+=1
IF DEFINED char SET "line=!line!%code% "&GOTO :loop
ECHO %text%
ECHO %line%

输出:

This is my zero text example
20 8 9 19  9 19  13 25  26 5 18 15  20 5 24 20  5 24 1 13 16 12 5

答案 1 :(得分:2)

这是获得Endoro结果的明显更有效的方法。它将仅在26次迭代中编码任何长度的文本。

@echo off
setlocal enableDelayedExpansion
set "text=This is my zero text example"
set "code=!text!"
set "chars=0abcdefghijklmnopqrstuvwxyz"
for /l %%N in (1 1 26) do for /f %%C in ("!chars:~%%N,1!") do set "code=!code:%%C=%%N !"
echo !text!
echo !code!

但请注意,两种解决方案都无法区分大小写。另外,我的简单替换算法很难扩展到支持输入中的数字字符。

当我编写一个名为CHARLIB.BAT的批处理字符串处理例程库时。其中一个例程有效地将字符转换为ASCII码。 new functions: :chr, :asc, :asciiMap 记录了图书馆的开发。最终代码可以从https://sites.google.com/site/dbenhamfiles下载。

我还开发了一个批处理宏库,在处理ASCII代码时效率更高:Batch macros to convert between ASCII code and character。批处理宏是一种将参数传递给存储在环境变量中的批处理代码的专门技术。它完全避免了CALL命令相对较慢的进程。我们一群人在DosTips开发了这项技术。