DOS 程序无法打印到 USB 打印机怎么办?
DOS 程序打印失败,通常不是打印机坏了,而是它只会往 LPT1–LPT9 或 PRN 这类字符模式端口写数据,而现代 USB 打印机在 Windows 里并没有 DOS 能直接访问的端口。解决办法是在 Windows 侧把 DOS 的打印作业“截”下来,再转发给 USB、网络或虚拟打印机。DOS2USB 就是做这件事的工具:它同时捕获 LPT1–LPT9 和 PRN 端口的打印作业,重定向到任意 Windows 能打印的打印机,包括 USB 打印机、GDI 打印机、网络打印机、IP 打印机、PDF 等虚拟打印机,并支持 ANSI、OEM、Latin、Greek、Russian、Portuguese、Turkish、Hebrew 等代码页。下面按“先判断原因、再选方案、最后验证”的顺序说明。
先确认失败原因
DOS 应用程序是按字符模式打印机设计的,输出目标是并口或 PRN。而现在的激光、喷墨打印机大多只提供 USB 连接,DOS 程序访问不到这个 USB 端口,所以打印任务发不出去或直接丢失。
判断方法很简单:如果同一台打印机在 Windows 里能正常打印,但 DOS 程序里选 LPT1、LPT2 或 PRN 都没有反应,基本就是端口不通,而不是驱动或硬件问题。
方案一:用 DOS2USB 捕获并重定向
这是针对该问题最直接的方案,适合仍要保留原 DOS 程序、又想让输出落到 USB 打印机的场景。
- 在运行 DOS 程序的 Windows 机器上安装 DOS2USB。资料显示支持 Windows 2000、XP、Vista、7、8、8.1,以及 Windows Server 2003(SP2)、2008、2012,并支持 LAN 和 RDP(终端服务)环境。
- 在工具中指定要捕获的端口,例如 LPT1 或 PRN。它支持 LPT1 到 LPT9 与 PRN 端口同时捕获。
- 为每个被捕获的端口选择对应的目标打印机——可以是 USB 打印机、网络打印机、IP 打印机、PDF 打印机或其他虚拟打印机。
- 保持 DOS 程序里的打印目标不变(仍指向 LPT1 或 PRN),由 DOS2USB 在后台完成转发。
几个值得注意的点:
- 即使打印机物理上就连在被捕获的那个端口上,重定向依然生效。
- 它提供全屏 DOS 提示符,在新版 Windows 甚至 RDP 下也能让 DOS 程序获得全屏体验。
- 授权可转移,不绑定系统或硬盘;另有 LAN 与 RDP 版本。资料提到 15 天退款保证。
- 如果 DOS 程序输出的是非英文内容,需要让 DOS 代码页与工具的语言支持匹配,否则会出现乱码。
方案二:用 Windows 共享 + net use 映射 LPT
如果不想装第三方捕获工具,可以借助 Windows 自带的端口映射,把 USB 打印机“伪装”成 DOS 能用的 LPT 端口。
- 在 Windows 中把 USB 打印机设为共享。
- 打开命令提示符,用
net use把 LPT1 映射到这台共享打印机,例如:
net use LPT1: \\本机名\共享打印机名 /persistent:yes
- 在 DOS 程序里照常打印到 LPT1。
预期结果是 DOS 的打印作业经 LPT1 转到共享打印机再输出。常见卡点是:共享名或计算机名写错、权限不足、LPT1 已被其他设备或驱动占用,以及部分 DOS 程序绕过 Windows 直接操作硬件端口导致映射失效。相比之下,方案一在端口捕获和代码页处理上更完整。
方案三:改用支持 DOS 输出的打印机或网络打印服务器
如果不想在每台机器上做软件重定向,也可以从硬件侧解决:使用仍提供并口、且能被 DOS 直接驱动的打印机,或通过网络打印服务器把并口打印任务接入网络。这类方案适合设备数量少、打印量稳定、且愿意更换或增加硬件的场景;代价是硬件选择受限,且不一定支持多语言代码页。
排查要点
- 捕获端口是否被占用:确认 DOS 程序实际输出到哪个端口,以及该端口是否已被其他程序或驱动占用。
- 打印机驱动是否正常:先在 Windows 里打印测试页,确保 Windows 侧本身能出纸。
- 代码页与字符集是否匹配:非英文内容乱码时,检查 DOS 代码页与工具的语言设置是否一致。
- 环境是否特殊:在 RDP 或终端服务下运行时,确认使用的是支持 LAN/RDP 的版本。
验证方法
先用 DOS 程序打印一张测试页,确认重定向后能正常出纸。如果 Windows 测试页正常、DOS 测试页不出纸,问题在捕获或端口映射环节;如果出纸但内容乱码,问题在代码页设置。逐项排除后即可定位到具体环节。