【问题标题】:Find ALL Ocurences of Letter change to Diffrent Letter查找所有出现的字母更改为不同的字母
【发布时间】:2016-06-08 22:20:45
【问题描述】:

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

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% 等。

【问题讨论】:

  • 您的代码对我来说运行得非常愉快。您发布的代码仅查找“b”。 Youd 需要为其他替换包括类似的行。你有没有想过相反的情况?例如,如果bb 中的字符串恰好出现在原始文件中,会发生什么情况?它将被翻译成b

标签: file batch-file encryption cmd


【解决方案1】:

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

set a=a
set b=b
set c=c

...“根据定义”是无用的(也就是说,没有进一步的解释),尽管很明显在这种情况下写 %a% 总是与写 a 相同(同样的情况发生其余字母)。

如果你想把一个字母换成一串数字,那么正确的做法应该是这样的:

set a=543241254
set b=785214185
set c=842501445

然后,为了通过 变量 的内容更改“a”字母,您可以在 for 命令中执行以下操作:

set "line=!line:a=%a%!"

同样:这会将a 字母更改为a 变量的内容。


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

set letter[a]=543241254
set letter[b]=785214185
set letter[c]=842501445

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

如果你执行这个命令:set letter,所有以“字母”开头的变量都会显示出来,包括它们的值;例如:

letter[a]=543241254
letter[b]=785214185
letter[c]=842501445

如果我们使用for /F "tokens=2,3 delims=[]=" %%a in ('set letter') do ...命令,那么%%a可替换参数将包含数组的每一个下标,即字母abc等, %%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!"
)

当然,您还必须在程序开头定义letter数组...

【讨论】:

    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多