我有带有构造的批处理文件:
if exist F:\ copy /y Application.exe F:\
在编译结束时,将可执行文件复制到USB密钥(如果已插入)。它可以正常使用USB密钥但是当我插入USB多卡读卡器时(这看起来像驱动器E:。 .H :,如果没有插入SD卡,当我执行上面的批处理行时,我得到一个“Windows - 无磁盘”阻塞消息。
如果有卡插入,我没有收到消息,(并且文件被复制),如果没有插入读卡器,我没有收到消息,文件也没有被复制(显然),但在这两种情况下,批处理文件都不会停止运行。只有插入读卡器但驱动器中没有卡时才会这样做。
我可以从批处理文件中安静地检查这些USB驱动器中没有“磁盘”吗?
答案 0 :(得分:7)
将IF EXIST
替换为DIR
并使用&&
或||
,具体取决于您希望发生的事情。
例如,
替换IF EXIST...
DIR F:\ && copy /y Application.exe F:\
替换IF NOT EXIST
DIR F:\ || copy /y Application.exe F:\
如果你想抑制DIR的STDOUT和STDERR来完全模仿IF EXIST ......
替换IF EXIST...
DIR F:\ 1>NUL 2>&1 && copy /y Application.exe F:\
替换IF NOT EXIST
DIR F:\ 1>NUL 2>&1 || copy /y Application.exe F:\
答案 1 :(得分:0)
我认为以前可以运行带有/F
参数的command.com,以使它始终自动失败这些错误消息,以便它不会破坏它们。虽然不确定它是否仍然适用于现代Windows。
答案 2 :(得分:0)
DIR
仅在驱动器不为空时才可以。
我的驱动器上没有文件,即使驱动器已正确插入,它也无法工作。
改为使用CD
:
CD F:\ && copy /y Application.exe F:\
答案 3 :(得分:0)
if exist
之后添加NUL
, F:\
将有效。像这样:
if exist F:\NUL copy /y Application.exe F:\