到相称下面是我的代码 -发送命令使用批处理文件中循环
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获得这个命令,我监控它的串行端口监视器之一。
可能是什么原因?
到相称下面是我的代码 -发送命令使用批处理文件中循环
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获得这个命令,我监控它的串行端口监视器之一。
可能是什么原因?
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 设备命名空间
的“\\.\
”前缀将访问Win32的设备命名空间而不是Win32文件命名空间。这是 直接完成对物理磁盘和卷的访问,如果API支持此类型 的访问,则不通过文件系统直接完成 。您可以以这种方式访问磁盘以外的许多设备 (例如,使用CreateFile和DefineDosDevice函数)。
例如,如果要打开系统的串行通讯端口 ,可以在调用 CreateFile函数时使用“COM1
”。这是可行的,因为COM1
-COM9
是NT名称空间中 保留名称的一部分,尽管使用“\\.\
”前缀 也可以使用这些设备名称。相比之下,如果您已经安装了 100串口扩展板,想打开COM56
,你 不能使用打开“COM56
”,因为没有预定义NT 命名空间COM56
。您需要使用“\\.\COM56
” 打开它,因为“\\.\
”直接进入设备命名空间,而不是 试图找到预定义的别名。
但是请注意,echo %CMD% > \\.\COM20
就送双引号和的>
重定向操作符前面的空间和最终<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
)