以下是我的代码 -
mode COM20 BAUD=115200 PARITY=n DATA=8
SET CMD="&511401120013FF0B7207010801020304050607250152"
FOR /L %%A IN (1,1,1) DO (
echo %CMD% > COM20
)
pause
我没有在COM 20上获得此命令,我正在其中一个串口监视器上监视它。
可能是什么原因?
答案 0 :(得分:1)
echo %CMD% > COM20:
或echo %CMD% > \\.\COM20
应将某些字符串发送到COM20:
端口。请注意,COM20
是 Win32 文件命名空间类别中的常规文件名,请参阅Naming Files, Paths, and Namespaces:
请勿对文件名使用以下保留名称:
CON,PRN,AUX,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7, COM8,COM9,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6,LPT7,LPT8和LPT9。 同时避免使用这些名称后立即进行扩展;对于 例如,不建议使用NUL.txt。有关更多信息,请参阅 Namespaces。
...
Win32 设备命名空间
"\\.\
" prefix将访问Win32设备命名空间而不是Win32文件命名空间。这是 如何直接访问物理磁盘和卷, 如果API支持此类型,则无需通过文件系统 访问。您可以通过这种方式访问磁盘以外的许多设备 (例如,使用CreateFile和DefineDosDevice函数)。
例如,如果要打开系统的序列号 通信端口1,您可以使用"COM1
"在打电话给 CreateFile函数。这是有效的,因为COM1
-COM9
是其中的一部分 NT命名空间中的保留名称,尽管使用"\\.\
"字首 也将使用这些设备名称。相比之下,如果你有一个 安装了100端口串口扩展板,想要打开COM56
,你 无法使用"COM56
"因为没有预定义的NTCOM56
的命名空间。您需要使用"\\.\COM56
" 因为"\\.\
"没有直接进入设备命名空间 试图找到预定义的别名。
但请注意,echo %CMD% > \\.\COM20
会在>
重定向运算符和 final <CR><LF>
之前发送双引号和,即输入
rem this space ↓
echo "&511401120013FF0B7207010801020304050607250152" 1>\\.\COM20
rem ↑ these double quotes ↑
您可以使用
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
mode COM20: BAUD=115200 PARITY=n DATA=8
SET "CMD=&511401120013FF0B7207010801020304050607250152"
rem ↑ note the opening double quote position
FOR /L %%A IN (1,1,1) DO (
rem next command suppresses double quotes and final `<CR><LF>` output
<NUL set /P "=!CMD!">\\.\COM20
rem OR next command suppresses double quotes output
rem echo !CMD!>\\.\COM20
)