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”弄掉就对了。但现在还没找到解决的思路方法,大家加油吧! 展开
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”弄掉就对了。但现在还没找到解决的思路方法,大家加油吧! 展开
5个回答
展开全部
主要还是路径的问题,假设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命令执行刚才的批处理文件
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命令执行刚才的批处理文件
展开全部
Private Sub Command1_Click()
a = "z:\" '目录
b = "*.txt" '文件类型 或者 b="*.*"
Shell "cmd /c dir/b " & a & b & " > z:\数据文件.DAT", 1
End Sub
自行修改路径,注意shell里各参数间的空格
a = "z:\" '目录
b = "*.txt" '文件类型 或者 b="*.*"
Shell "cmd /c dir/b " & a & b & " > z:\数据文件.DAT", 1
End Sub
自行修改路径,注意shell里各参数间的空格
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Print #1, "Dir / b " + LDir.Caption + "\" + CmbFileFilter.Text + " > FilesList.DAT"
改成
Print #1, "Dir / b """ + LDir.Caption + "\" + CmbFileFilter.Text + """> FilesList.DAT"
改成
Print #1, "Dir / b """ + LDir.Caption + "\" + CmbFileFilter.Text + """> FilesList.DAT"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根本原因是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
一、把下面代码复制到模块中:
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
120203851的回答应该说基本正确。
主要是目录路径里面有空格,导致出错。目录前后加上引号就OK了。
Print #1, "Dir / b """ + LDir.Caption + "\" + CmbFileFilter.Text + """ > FilesList.DAT"
“>”前面的空格是不能少的
我试着建了一个批处理:
dir /b "C:\Documents and Settings\Administrator\桌面\*.jpg" > a.txt
pause
执行后,也有那个 1>,但是结果正确
主要是目录路径里面有空格,导致出错。目录前后加上引号就OK了。
Print #1, "Dir / b """ + LDir.Caption + "\" + CmbFileFilter.Text + """ > FilesList.DAT"
“>”前面的空格是不能少的
我试着建了一个批处理:
dir /b "C:\Documents and Settings\Administrator\桌面\*.jpg" > a.txt
pause
执行后,也有那个 1>,但是结果正确
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询