[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 请教:管道符如何输出到set /p

我的标题表达可能不太清楚。

意思是这样的:
管道符(|)可将前面的结果输出到后面的命令。如:
echo Y|del 1.txt


但比如,有一个程序,让输入一个数。但输入完你按回车时,不小心多敲了一个字符,比如引号。
这时程序会发现输入的不是数字。
但你输入的数字很长,总不能重新输入一遍吧。
为方便重新输入,将原来的结果先输出到set /p里。如:
  1. echo %a%|set /p a=
复制代码
以便实现在原来的基础上修改再输入。相信也明白我的意思了吧

但经测试,上面的代码是错误的。

求教:如何修改,使目的能达到?

如果能达到,再问一个问题:
如果用户输入的有类似=!%&的特殊字符,能否原样输出到set /p

附:目前的几种我找到的我不太满意的解决方式:
1.将原先结果用echo显示到屏幕上,让用户自行复制。
论:这种方法需要用户一行一行复制(因为显示时每一行后会有一个回车符),还不能用快捷键,所用时间也不亚于让用户重新输入一遍。

2.增加智能识别。
论:是,这样可以把最后一个多输入的字符删掉。但如果不止一个呢?或是用户输入的一长串数字中间有某处按错键了,把5按成了6,你能智能判断吗?

3.将原先结果输出到文本。让用户对文本修改后再从文本中提取
论:是,如果不考虑特殊字符,编码,行数等,这或许是一个选择。但是,你有没想过,如果一行过长呢?一个变量最多有8192个字,你能保证完整性不?set /p还能将长度控制在1021以内。

我用搜索功能只搜索到这几种成功的解决方法,想问还有解决方法不?
不管有没有,先在此谢谢大家了。

回复 2# 523066680


    说的没错,但我试过,有时只能刷出上上一次的,反而不能刷出上一次的。还有,如果存在外部调用批处理,就不能刷出了。
比如:在命令行输入n多次命令,然后输入cmd,按up键发现一条命令也调用不出来。

TOP

回复 3# Batcher


    谢谢提醒。

TOP

返回列表