Shell函数为何不支持带空格的路径?

zdingyun 2011-08-17 01:06:21
Private Sub Command1_Click()
Dim SHa
Dim lj
lj = "D:\Program Files\Microsoft Visual Studio\VB98\TsDig\data\1.jpg"
SHa = Shell("c:\windows\system32\mspaint.exe " & lj, 1)
End Sub

如代码中lj变量中有多个空格,该如何解决?

运行代码告诉没发现文件"D:\Program.png"
...全文
587 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2011-08-17
  • 打赏
  • 举报
回复
用空路径就识别成参数了
zdingyun 2011-08-17
  • 打赏
  • 举报
回复
也可:
Private Sub Command1_Click()
' 设置“CancelError”为 True
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
' 设置标志
CommonDialog1.Flags = cdlOFNHideReadOnly
' 设置过滤器
CommonDialog1.Filter = "JPEG Files" & "(*.jpg)|*.jpg"
' 指定缺省的过滤器
CommonDialog1.FilterIndex = 2
' 显示“打开”对话框
CommonDialog1.ShowOpen
' 显示选定文件的名字
Text1 = CommonDialog1.FileName
Dim sha
sha = Shell("c:\windows\system32\mspaint.exe " & """" & CommonDialog1.FileName, 1)
Exit Sub
ErrHandler:
End Sub
zdingyun 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 jhone99 的回复:]
VB code

Private Sub Command1_Click()
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.Filter = "JPEG Files" &……
[/Quote]

后一个Chr(34)可以不加:
Private Sub Command1_Click()
' 设置“CancelError”为 True
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
' 设置标志
CommonDialog1.Flags = cdlOFNHideReadOnly
' 设置过滤器
CommonDialog1.Filter = "JPEG Files" & "(*.jpg)|*.jpg"
' 指定缺省的过滤器
CommonDialog1.FilterIndex = 2
' 显示“打开”对话框
CommonDialog1.ShowOpen
' 显示选定文件的名字
Text1 = CommonDialog1.FileName
Dim sha
sha = Shell("c:\windows\system32\mspaint.exe " & Chr(34) & CommonDialog1.FileName, 1)
Exit Sub
ErrHandler:
End Sub
无·法 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 zdingyun 的回复:]

引用 17 楼 chinaboyzyq 的回复:
什么操作系统啊?xp sp3 ? win7 ?


WIN7(32位)旗舰版,XPSP2升级到SP3,都有此现象,只要路径中无空格,一切正常.
[/Quote]告诉你个方法,右击图片文件,选择打开方式,选择画图工具,然后用可以查看命令行参数的工具看下具体的参数是什么。这里给你推荐一个。
http://download.csdn.net/source/3039852
zdingyun 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 jhone99 的回复:]
VB code

Private Sub Command1_Click()
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.Filter = "JPEG Files" &……
[/Quote]

WIN7测试通过.
jhone99 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 jhone99 的回复:]
VB code

Private Sub Command1_Click()
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.Filter = "JPEG Files" &……
[/Quote]

xp下通过,win7不知道
zdingyun 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 zdingyun 的回复:]
引用 17 楼 chinaboyzyq 的回复:
什么操作系统啊?xp sp3 ? win7 ?


WIN7(32位)旗舰版,XPSP2升级到SP3,都有此现象,只要路径中无空格,一切正常.
[/Quote]

jhone99 2011-08-17
  • 打赏
  • 举报
回复

Private Sub Command1_Click()
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.Filter = "JPEG Files" & "(*.jpg)|*.jpg"
CommonDialog1.FilterIndex = 2
CommonDialog1.ShowOpen
'Text1 = CommonDialog1.FileName
Dim SHa
SHa = Shell("c:\windows\system32\mspaint.exe " & Chr(34) & CommonDialog1.FileName & Chr(34), 1)
Exit Sub
ErrHandler:
Exit Sub
End Sub
zdingyun 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 chinaboyzyq 的回复:]
什么操作系统啊?xp sp3 ? win7 ?
[/Quote]

WIN7(32位)旗舰版,XPSP2升级到SP3,都有此现象,只要路径中无空格,一切正常.
lxq19851204 2011-08-17
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.Filter = "JPEG Files" & "(*.jpg)|*.jpg"
CommonDialog1.FilterIndex = 2
CommonDialog1.ShowOpen
'Text1 = CommonDialog1.FileName
Dim SHa
Dim pic1
pic1 = """" & CommonDialog1.FileName & """"

SHa = Shell("c:\windows\system32\mspaint.exe " & pic1, 1)
Exit Sub
ErrHandler:
Exit Sub
End Sub
lxq19851204 2011-08-17
  • 打赏
  • 举报
回复
VISTA和WIN7好像有个扩展文件名的

上次我的一个TEXT文件,也是找不到,要改成1.text.text才可以。
不知道图片是怎么样的?
无·法 2011-08-17
  • 打赏
  • 举报
回复
带空格的在xp下测试正常。你的好像是vista或者win7,具体的你测试下不带空格的看看吧,反正路径一定要用双引号括起来。
另外可以尝试在cmd下敲入mspaint "D:\Program Files\Microsoft Visual Studio\VB98\TsDig\data\1.jpg"
看看能不能打开。
无·法 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zdingyun 的回复:]

引用 12 楼 sysdzw 的回复:
引用 10 楼 zdingyun 的回复:

引用 8 楼 cuizm 的回复:
转换成短路径就可以了

那如何用代码转换?
我想是你的D:\Program Files\Microsoft Visual Studio\VB98\TsDig\data\1.jpg 这个路径不存在吧?复制到开始-运行里面回车看看能不能打开。


这个路径存在不存在见图:

[/Quote]这图不能说明存不存在,你按我说的步骤操作下吧。
chinaboyzyq 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 chinaboyzyq 的回复:]

Dim fso As New FileSystemObject
fso里面的getfile("长文件名").shortname

script run time
[/Quote]
fso获得短文件名的方法:

x=fso.getfile("长文件名").shortname
chinaboyzyq 2011-08-17
  • 打赏
  • 举报
回复
什么操作系统啊?xp sp3 ? win7 ?
chinaboyzyq 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zdingyun 的回复:]

引用 5 楼 chinaboyzyq 的回复:
支持,注意要用双引号引起来。


VB code

lj = """D:\Program Files\Microsoft Visual Studio\VB98\TsDig\data\1.jpg"""

没用的,照样出错.
[/Quote]

查看你的路径是否正确,我测试有空格加双引号没问题。
咸清 2011-08-17
  • 打赏
  • 举报
回复
也不试试我的方法~
zdingyun 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sysdzw 的回复:]
引用 10 楼 zdingyun 的回复:

引用 8 楼 cuizm 的回复:
转换成短路径就可以了

那如何用代码转换?
我想是你的D:\Program Files\Microsoft Visual Studio\VB98\TsDig\data\1.jpg 这个路径不存在吧?复制到开始-运行里面回车看看能不能打开。
[/Quote]

这个路径存在不存在见图:

chinaboyzyq 2011-08-17
  • 打赏
  • 举报
回复
Dim fso As New FileSystemObject
fso里面的getfile("长文件名").shortname

script run time
无·法 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zdingyun 的回复:]

引用 8 楼 cuizm 的回复:
转换成短路径就可以了

那如何用代码转换?
[/Quote]我想是你的D:\Program Files\Microsoft Visual Studio\VB98\TsDig\data\1.jpg 这个路径不存在吧?复制到开始-运行里面回车看看能不能打开。
加载更多回复(11)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧