找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 15703|回复: 0

[其他] ascode 应用之 不换行显示字符串 put.com

[复制链接]
发表于 2012-12-24 02:41:56 | 显示全部楼层 |阅读模式
本帖最后由 CrLf 于 2012-12-30 18:08 编辑

其实旧帖中 qzwqzw (以下简称 qzw)也写过不换行输出的 ascode(见 http://bbs.bathome.net/redirect. ... 3&fromuid=30406),但有两个瑕疵:
1、没有对有效的命令行参数长度进行判断,而有效参数总是前缀空格、后缀回车,所以直接从 ds:82 开始获取参数内容的话将显示一个回车符
2、com 解释命令行参数时会忽略头部空格,再附加一个空格到 ds:81 处,所以无法原样输出以空格开头的内容
针对这两个问题,在 qzw 的思路下用自己的办法重写了一下:
  1. @echo off&chcp 437|graftabl>nul 936
  2. echo>put.com PY4`P_W](CX(Cf(Cm(Co2M tvI,t,jPZ,G:F"ubIB5;@C-!-  \\不换行输出字符串
  3. put 同
  4. put 行
  5. put 输
  6. put 出
  7. put ;    建议给参数前缀一个 ; 字符,
  8. put      因为 com 解析参数时会自动忽略头部空格。
  9. pause
复制代码
但由于获取的是命令行参数,而十六位 com 支持的参数长度最长为 122 字节(测试所得 0x7B-1 字节),所以你懂得...若要突破这一限制,需要改成从环境变量或键盘缓冲区获取输入,但是前者工程量太大,后者则有转行为回车换行符吞噬器的倾向——假如用户能够把内容不换行输出到键盘缓冲区,还要 put.com 做什么。

顺便附上 vbs 的近似实现,好处是支持更长的命令行参数以及不需要被迫切换代码页,但好像是不能获取完整参数,所以只判断及显示第一个参数,或许得用 wmi 之类的外部手段获取命令行参数?
  1. @echo off

  2. echo If WSH.Arguments.Count Then WSH.StdOut.Write(WSH.Arguments(0))>put.vbs
  3. ::put.vbs 主体

  4. cscript /nologo put.vbs 1234567
  5. ::调用方式

  6. pause
复制代码
2012/12/30 更新内容:
  1、大幅简化代码,思路更清晰
  2、找到 xp 下致错的原因,修正后效果完美

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 Well done!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:37 , Processed in 0.016828 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表