我正在研究一种加密方法,将所有字母更改为一串数字,例如:
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%等。
答案 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 ...
可替换参数将包含数组的每个下标,即字母%%a
,a
,b
等,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!"
)
数组...