查找所有发生的字母更改为不同的字母

时间:2016-02-25 21:59:18

标签: file batch-file encryption cmd

我正在研究一种加密方法,将所有字母更改为一串数字,例如:

set a=a
set b=b
set c=c
set aa=543241254
set bb=785214185
set cc=842501445

我的问题是如何扫描用户输入的文件并将所有字母更改为数字。 (正在更改的文件类似于“hihowareyou”没有空格或大写字母) 我尝试的是在所述文件中搜索“a”并将其替换为数字,但我的部分不起作用。

(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:%b%=%bb%!"
    echo(!line!
    endlocal
))>"%newfile%"
type "%newfile%" >>%newfile%

我不知道如何扫描文本文件中的字母并将其替换为%a%,%b%,%c%等。

1 个答案:

答案 0 :(得分:3)

你应该首先意识到这些命令:

Document Length

......“根据定义”是没用的(也就是说,没有进一步的解释),虽然很明显,在这种情况下,写作set a=a set b=b set c=c 将始终与仅写%a%相同(其余字母也是如此)。

如果你想用一串数字改变一个字母,那么正确的方法应该是:

a

然后,为了通过变量的内容更改'a'字母,您可以在set a=543241254 set b=785214185 set c=842501445 命令中执行以下操作:

for

再次:这会将set "line=!line:a=%a%!" 字母更改为a变量的内容。

现在,您应该意识到您需要执行以前的替换,而不是单个a字母/变量,而是系列变量逐个表示。以相同的方式处理一系列变量的标准方法(实际上意味着“使用相同的代码”)是通过a命令改变下标的值array结合使用。例如,如果我们为数组的名称选择“letter”并在数组的不同元素中定义所需的替换值,那么我们肯定会这样做:

for

在此之后,我们只需要知道如何操纵这些变量/值。关于这一点的全部细节在Arrays, linked lists and other data structures in cmd.exe (batch) script给出,所以我不再在此重复。但是,解决此问题所需的数组管理比在该链接上给出的完整解释更简单。

如果执行此命令:set letter[a]=543241254 set letter[b]=785214185 set letter[c]=842501445 ,将显示以“letter”开头的所有变量,包括其值;例如:

set letter

如果我们使用letter[a]=543241254 letter[b]=785214185 letter[c]=842501445 命令,那么for /F "tokens=2,3 delims=[]=" %%a in ('set letter') do ...可替换参数将包含数组的每个下标,即字母%%aab等,c参数将包含相应的数值。

这样,为了完成您的程序并替换所有已定义的字母,您只需将%%b行放在上一个set "line=!line:%b%=%bb%!"命令中并正确更改for部分即可代表字母%b%;并按%%a替换代表数值%bb%部分:

%%b

当然,您还必须在程序开头定义 for /F "tokens=2,3 delims=[]=" %%a in ('set letter') do ( set "line=!line:%%a=%%b!" ) 数组...