+ -
当前位置:首页 → 问答吧 → Shell函数为何不支持带空格的路径?

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

时间:2011-08-17

来源:互联网

VB code
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"

作者: zdingyun   发布时间: 2011-08-17

沙发自己坐.

作者: zdingyun   发布时间: 2011-08-17

我是来顶的~
Win下的带空格的路径表示:
用缩写。比如c:\Program Files缩写为c:\Progra~1
再来刨根问底查查这个命名是否有规则,于是找到:
采用8个字符缩写,即写头六个字母(略去空白),另加波浪号和1,首字母不足六个字母,略去空白,用了第二个词的字母

,凑成六个。
例如:"Documents and Settings“ -- DOCUME~1、"Local Settings" -- LOCALS~1
(注意略去空白,用了第二个词的字母,凑成六个,再加波浪号和1)。
如果多个文件前6字符一样怎么办?为什么最后是1而不是0或者其他数字呢?看看这个例子:
假设下面是你的C盘根目录中的文件夹:
Program Files
Progra file
Progra zhang
则三个目录分别表示为:C:\Progra~1; C:\Progra~2; C:\Progra~3;

作者: ybh37   发布时间: 2011-08-17

试试
lj = chr(39) & "D:\Program Files\Microsoft Visual Studio\VB98\TsDig\data\1.jpg" & chr(39)

作者: patrickkong   发布时间: 2011-08-17

这样应该就可以了
VB code
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

作者: sysdzw   发布时间: 2011-08-17

支持,注意要用双引号引起来。

VB code

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


作者: chinaboyzyq   发布时间: 2011-08-17

问题是该路径是通过CommonDialog控件获取的.见代码:
VB code
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 " & CommonDialog1.FileName, 1)
    Exit Sub
ErrHandler:
    Exit Sub
End Sub

带空格的CommonDialog1.FileName不能正确传递,如果CommonDialog1.FileName中没空格就能正确传递.

作者: zdingyun   发布时间: 2011-08-17

含空格的路径vb6调用时,必须给路径加双引号:
VB code

    SHa = Shell("c:\windows\system32\mspaint.exe ""D:\Program Files\Microsoft Visual Studio\VB98\TsDig\data\1.jpg""", 1)


作者: chinaboyzyq   发布时间: 2011-08-17

转换成短路径就可以了

作者: cuizm   发布时间: 2011-08-17

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


VB code

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

没用的,照样出错.

作者: zdingyun   发布时间: 2011-08-17

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

那如何用代码转换?

作者: zdingyun   发布时间: 2011-08-17

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

那如何用代码转换?

短路径仍不行:
VB code

    Dim SHa
    SHa = Shell("c:\windows\system32\mspaint.exe D:\Progra~1\Micros~1\VB98\TsDig\data\1.jpg", 1)

作者: zdingyun   发布时间: 2011-08-17

引用 10 楼 zdingyun 的回复:

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

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

作者: sysdzw   发布时间: 2011-08-17

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

script run time

作者: chinaboyzyq   发布时间: 2011-08-17

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

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

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


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

作者: zdingyun   发布时间: 2011-08-17

也不试试我的方法~

作者: ybh37   发布时间: 2011-08-17

引用 9 楼 zdingyun 的回复:

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


VB code

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

没用的,照样出错.


查看你的路径是否正确,我测试有空格加双引号没问题。

作者: chinaboyzyq   发布时间: 2011-08-17

什么操作系统啊?xp sp3 ? win7 ?

作者: chinaboyzyq   发布时间: 2011-08-17

引用 13 楼 chinaboyzyq 的回复:

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

script run time

fso获得短文件名的方法:

x=fso.getfile("长文件名").shortname

作者: chinaboyzyq   发布时间: 2011-08-17

热门下载

更多