[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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以内。

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

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

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

"但你输入的数字很长,总不能重新输入一遍吧。"
印象中按 键盘的 up 方向键 可以直接刷出上一次的输入内容

TOP

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

但是,并非所有的命令都支持从管道获取输入。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# 523066680


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

TOP

回复 3# Batcher


    谢谢提醒。

TOP

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

回复 4# SQYSQYSQY


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

TOP

返回列表