发送命令以在循环中使用批处理文件进行comport

时间:2016-06-10 06:47:18

标签: batch-file

以下是我的代码 -

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上获得此命令,我正在其中一个串口监视器上监视它。

可能是什么原因?

1 个答案:

答案 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"因为没有预定义的NT   COM56的命名空间。您需要使用" \\.\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
)