Board logo

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

作者: SQYSQYSQY    时间: 2019-1-13 12:33     标题: 请教:管道符如何输出到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以内。

我用搜索功能只搜索到这几种成功的解决方法,想问还有解决方法不?
不管有没有,先在此谢谢大家了。
作者: 523066680    时间: 2019-1-13 12:50

本帖最后由 523066680 于 2019-1-13 13:00 编辑

不明白不明白,我对批处理一窍不通

"但你输入的数字很长,总不能重新输入一遍吧。"
印象中按 键盘的 up 方向键 可以直接刷出上一次的输入内容
作者: Batcher    时间: 2019-1-13 13:28

管道符(|)可将前面的结果输出到后面的命令

但是,并非所有的命令都支持从管道获取输入。
作者: SQYSQYSQY    时间: 2019-1-13 13:55

回复 2# 523066680


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

回复 3# Batcher


    谢谢提醒。
作者: 老刘1号    时间: 2019-1-14 11:11

本帖最后由 老刘1号 于 2019-1-14 11:14 编辑

回复 4# SQYSQYSQY


    第一次按上可以输入上次的,第二次按下可以输入刚才的
1.clip了解一下
2.choice了解一下




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2