You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理脚本优化求助:循环内字符串与变量操作及大小写敏感问题

批处理实现精简大小写敏感的Rot13加密脚本

我帮你搞定这个Rot13批处理的问题,直接上可运行的精简代码,再拆解细节和你之前循环出错的原因:

完整可运行代码

@echo off
setlocal enabledelayedexpansion

:: 定义大小写独立的Rot13映射表
set "lower_chars=abcdefghijklmnopqrstuvwxyz"
set "lower_rot13=nopqrstuvwxyzabcdefghijklm"
set "upper_chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "upper_rot13=NOPQRSTUVWXYZABCDEFGHIJKLM"

set /p "input_str=请输入要加密的字符串:"

:: 循环26次完成所有字母的替换
for /l %%i in (0,1,25) do (
    :: 替换当前索引的小写字母
    set "input_str=!input_str:!lower_chars:~%%i,1!=!lower_rot13:~%%i,1!!"
    :: 替换当前索引的大写字母
    set "input_str=!input_str:!upper_chars:~%%i,1!=!upper_rot13:~%%i,1!!"
)

echo 加密结果:!input_str!
endlocal

核心逻辑说明

  1. 变量延迟扩展是关键:必须开启enabledelayedexpansion,否则循环内部无法动态读取和修改变量值——批处理默认会在循环执行前把所有%var%形式的变量替换成初始值,导致循环里的替换完全失效,这大概率是你之前第二个循环出错的原因。
  2. 大小写敏感映射:把小写和大写字母的映射表分开定义,确保HELLO转成URYYB,hello转成uryyb,非字母字符会原样保留。
  3. 精简循环逻辑:只需要循环26次(对应26个英文字母),就能一次性完成所有字母的Rot13替换,再也不用逐行写几十条替换语句。

你之前循环出错的常见排查点

  • 没开启延迟扩展:检查脚本开头有没有setlocal enabledelayedexpansion,循环内的变量是不是用!var!而不是%var%引用。
  • 映射表引用错误:比如在替换语句里没有用!lower_chars:~%%i,1!这种延迟扩展的方式调用子串,导致替换的目标字符无法被正确识别。

如果需要扩展支持其他字符的Rot13(比如特殊符号),只需要添加对应的原字符表和Rot13表,然后在循环里同步处理就行。

内容的提问来源于stack exchange,提问作者Q̞ī̯X̶͇͇͇͇͇͇͇͇͇͇͇͇͇̯̯̳̳͈͈͈͆͆

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:37:59