3

我正在尝试创建一个批处理文件,该文件将更改一些输入文本并将它们更改为 , 等的对应数字a=1b=2例如c=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
4

2 回答 2

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
于 2013-08-22T10:41:23.193 回答
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 码。该库的开发记录在新功能中::chr、:asc、:asciiMap。最终代码可以从https://sites.google.com/site/dbenhamfiles下载。

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

于 2013-08-22T16:54:13.370 回答