VB 调用DOS批处理命令出错

在VB的PrivateSubCmdReadFiles_Click()OpenApp.Path+"\FilesList.BAT"ForOutputAs#1'建一批处理文件,... 在VB 的
Private Sub CmdReadFiles_Click()
Open App.Path + "\FilesList.BAT" For Output As #1 '建一批处理文件,以获取文件列表
Print #1, "Dir / b " + LDir.Caption + "\" + CmbFileFilter.Text + " > FilesList.DAT" '执行DOS下的Dir/b命令,将枚举得到的文件名列表写入FilesList.DAT中
Print #1, "Pause"
close #1
'shell("cmd.exe /c dir/b 目录\文件类型 > 数据文件.DAT")'即使执行此代码也没用,所得的数据文件仍然是空的

Shell "FilesList.BAT" 'VB调用Dos命令执行刚才的批处理文件
End Sub
从图中的结果可以看出来: FilesList.BAT 源文件中的 test 后面没有1的,而在真正执行FilesList.BAT时,从DOS运行窗口可以看出,命令行中的test 后面多了字符1,导致系统找不到指定路径,从而生成的FilesList.DAT文件是空白的。
怎么解决此问题呢?
我的目的是想通过在VB 环境下,通过执行shell("dir/b 目录\文件类型 > 数据文件.DAT")
或者 shell("cmd.exe /c dir/b 目录\文件类型 > 数据文件.DAT")
可是真正执行时,就会出现图中所示的系统找不到文件路径,进而所得的数据文件.DAT是空的。 而VB 的Dir函数或者FileList控件有缺陷和漏洞,所以不采用它们,就想采用DOS的dir 命令,这没有缺陷,但就是出现上述问题。怎么解决呢?
谢谢各位献计献策,经验证,各位的方法所得的数据文件仍然是空的。真实执行的批处理的DOS命令窗口中仍然显示 1> 这样的字符,导致路径不明而出错。这个“1>”之前的1是怎么来的呢?只要把这“>”之前的“1”弄掉就对了。但现在还没找到解决的思路方法,大家加油吧!
展开
 我来答
百度网友bdb9803
2011-05-29 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:53%
帮助的人:9941万
展开全部
主要还是路径的问题,假设Ldir.Caption的路径就是app.path,CmbFileFilter.Text ="*.*" ,下面代码经过验证可行:

Open App.Path + "\FilesList.BAT" For Output As #1 '建一批处理文件,以获取文件列表
Print #1, "Dir / b " + LDir.Caption + "\" + CmbFileFilter.Text + " > " + LDir.Caption + "\FilesList.DAT" '执行DOS下的Dir/b命令,将枚举得到的文件名列表写入FilesList.DAT中
Print #1, "Pause"
Close #1
Shell "cmd /c " & App.Path + "\FilesList.BAT" 'VB调用Dos命令执行刚才的批处理文件
tianqing20wen

2011-05-29 · TA获得超过2.4万个赞
知道大有可为答主
回答量:8226
采纳率:88%
帮助的人:5015万
展开全部
Private Sub Command1_Click()
a = "z:\" '目录
b = "*.txt" '文件类型 或者 b="*.*"
Shell "cmd /c dir/b " & a & b & " > z:\数据文件.DAT", 1
End Sub

自行修改路径,注意shell里各参数间的空格
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
120203851
2011-05-29 · TA获得超过649个赞
知道小有建树答主
回答量:459
采纳率:100%
帮助的人:660万
展开全部
Print #1, "Dir / b " + LDir.Caption + "\" + CmbFileFilter.Text + " > FilesList.DAT"
改成
Print #1, "Dir / b """ + LDir.Caption + "\" + CmbFileFilter.Text + """> FilesList.DAT"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ljl88900
2011-05-29 · TA获得超过2660个赞
知道大有可为答主
回答量:2197
采纳率:100%
帮助的人:2600万
展开全部
根本原因是DOS路径的问题。
一、把下面代码复制到模块中:
Option Explicit
Private Declare Function GetShortPathName Lib "kernel32" Alias _
"GetShortPathNameA" (ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, ByVal cchBuffer As _
Long) As Long

Function ShortPath(ByVal Path As String) As String
Dim Tmp As String
Dim l As Long
Tmp = String(256, 0)
l = GetShortPathName(Path, Tmp, Len(Tmp))
ShortPath = Replace(Left(Tmp, l), Chr(0), "")
End Function
二、你的代码修改如下:
Private Sub CmdReadFiles_Click()
Open App.Path + "\FilesList.BAT" For Output As #1 '建一批处理文件,以获取文件列表
Print #1, "Dir / b " + ShortPath(LDir.Caption) + "\" + CmbFileFilter.Text + " > FilesList.DAT" '执行DOS下的Dir/b命令,将枚举得到的文件名列表写入FilesList.DAT中
Print #1, "Pause"
close #1
Shell "FilesList.BAT" 'VB调用Dos命令执行刚才的批处理文件
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刀成朝1
2011-05-29 · TA获得超过1334个赞
知道大有可为答主
回答量:763
采纳率:0%
帮助的人:685万
展开全部
120203851的回答应该说基本正确。
主要是目录路径里面有空格,导致出错。目录前后加上引号就OK了。
Print #1, "Dir / b """ + LDir.Caption + "\" + CmbFileFilter.Text + """ > FilesList.DAT"
“>”前面的空格是不能少的
我试着建了一个批处理:
dir /b "C:\Documents and Settings\Administrator\桌面\*.jpg" > a.txt
pause
执行后,也有那个 1>,但是结果正确
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式