2017-07-18 57 views
0

我不完全确定如何执行此操作,但我正在创建一个批量文件以将数字切换为字母对应字符并返回。批量 - 将数字切换到它们的字母对应字符并返回

我在网上搜索,我发现这个从计算器:

@echo off 
setlocal enableDelayedExpansion 
set "text=This is a test" 
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! 
pause 

它的工作原理的字母更改为数字,但我试图改变号码回给自己的信记者。 (单词中的空格是数字中的双空格)

这看起来很难,因为可以添加数字,如set /a Num+=1 并且不能添加字母。的就是我试图完成

实例:

1 2 3 4 - ABCD

19 20 1 3 11 15 22 5 18 6 12 15 23 - 计算器

任何人都知道如何去做这个?

回答

3
@echo off 
setlocal enableDelayedExpansion 
set "text=This is a test" 
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% 
ECHO ---------------------------------- 
SET "decode=%code%" 
for /l %%N in (26 -1 1) do for /f %%C in ("!chars:~%%N,1!") do set "decode=!decode:%%N =%%C!" 
echo %text% 
echo %code% 
ECHO %decode% 
GOTO :EOF 

由于每个字母是由一个数字,然后替换成空格,你需要认识到,1意味着a11意味着k21意味着u,所以你需要首先替换的最高数字。数字+空格成为与用于编码数据的字符串相同的第N个字符。

请不要认为%var%!var!是循环外相同。在循环外部使用!var!表格可能会引起混淆,因为它会使编码器知道原始值和更改值之间的差异。

+0

感谢您的快速回复!它可以工作,但是如果我输入'1 2 3 4 3 2 1',它会输出'a b c d c b 1'是否应该在那里? – djmrminer

+1

是的,因为它*后面没有空格,编码方案是用[数字字符串+空格]替换字母, – Magoo

0

以下是使用批处理命令powershell.exe执行此操作的一种方法。最棘手的问题是处理空间角色。

PS C:\src\t> Get-Content .\cn.ps1 
$text = 'This is a test' 
$text 

$nums = ((($text.ToLower() -replace " ","``").ToCharArray() | 
    ForEach-Object { [int]$_ - [int][char]"``" }) -join ' ') -replace ' 0 ',' ' 
$nums 

$letters = ((($nums.Trim()).Split() | 
    ForEach-Object { [char]([int]$_ + [int][char]"``") }) -join '') -replace "``"," " 
$letters 

PS C:\src\t> .\cn.ps1 
This is a test 
20 8 9 19 9 19 1 20 5 19 20 
this is a test 

它可以写入批处理脚本。

C:\src\t>powershell -NoProfile -File cn.ps1 
This is a test 
20 8 9 19 9 19 1 20 5 19 20 
this is a test 
相关问题