我不确定如何执行此操作,但我正在创建一个批处理文件,以便将数字切换到字母对应部分并返回。
我在线搜索,我从stackoverflow找到了这个:
@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 - stackoverflow
任何人都知道怎么做?
答案 0 :(得分: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
表示a
,11
表示k
且21
表示u
,因此您需要先替换最高的数字。数字+空格成为与用于编码数据的字符串相同的第N个字符。
请注意,%var%
和!var!
在循环之外是相同的。在循环外使用!var!
形式可能会让人感到困惑,因为它会使编码人员注意到原始值和更改值之间的差异。
答案 1 :(得分: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