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

如何让Batch脚本支持多行粘贴输入以解密加密邮件?

Batch脚本实现多行粘贴输入的解决方案

方法一:通过循环读取直到空行结束

这种方式让用户粘贴内容后,输入空行即可终止输入,逻辑简单直观。

示例脚本:

@echo off
setlocal enabledelayedexpansion

:: 定义换行符,注意两行之间必须保留空行
set "newline=^

"

echo 请粘贴多行加密邮件内容,输入空行结束:
set "encrypted_content="

:read_line
set "line="
set /p line=
:: 若输入为空行,终止读取
if not defined line goto end_read
:: 若已有内容,先追加换行符再添加新行
if defined encrypted_content set "encrypted_content=!encrypted_content!!newline!"
set "encrypted_content=!encrypted_content!!line!"
goto read_line

:end_read
echo 已获取完整加密内容:
echo !encrypted_content!
:: 在此处添加你的解密处理逻辑
endlocal

关键说明:

  • 启用enabledelayedexpansion是为了在循环中正确拼接字符串变量;
  • set "newline=^"后面必须跟一个空行,才能正确定义Batch中的换行符;
  • 每次读取一行后判断是否为空,为空则结束输入循环。

方法二:通过Ctrl+Z(EOF)终止输入

这种方式适合用户直接粘贴完整内容后,按Ctrl+Z再回车结束输入,无需额外输入空行。

示例脚本:

@echo off
setlocal enabledelayedexpansion

:: 定义换行符
set "newline=^

"

echo 请粘贴多行加密邮件内容,完成后按 Ctrl+Z 再按回车结束:
set "encrypted_content="

:: 使用findstr读取所有输入行,每行添加行号前缀
for /f "delims=" %%a in ('findstr /n "^"') do (
    set "line=%%a"
    :: 移除行号前缀(格式为"行号:内容")
    set "line=!line:*:=!"
    if defined encrypted_content set "encrypted_content=!encrypted_content!!newline!"
    set "encrypted_content=!encrypted_content!!line!"
)

echo 完整加密内容:
echo !encrypted_content!
:: 在此处添加解密逻辑
endlocal

关键说明:

  • findstr /n "^"会读取所有输入行(包括空行),并为每行添加行号前缀;
  • 通过!line:*:=!移除行号前缀,保留原始内容;
  • 输入完成后按Ctrl+Z会触发EOF标记,终止for /f循环。

为什么set /p无法处理多行输入

set /p命令的设计逻辑是仅读取第一个换行符之前的内容,所以无论粘贴多少行,它只会捕获第一行内容,因此必须通过循环读取或结合其他命令来实现多行输入捕获。

内容的提问来源于stack exchange,提问作者Patfred

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:46:00