2016-06-10 117 views
0

到相称下面是我的代码 -发送命令使用批处理文件中循环

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

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 
)