我遇到 Unicode 命名文件夹的问题。当我将文件夹拖到脚本中时,它没有正确显示文件夹的路径。
简单的 VBScript(这只是其中的一部分):
Dim Wshso : Set Wshso = WScript.CreateObject("WScript.Shell")
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
If WScript.Arguments.Count = 1 Then
If FSO.FileExists(Wscript.Arguments.Item(0)) = true and FSO.FolderExists(Wscript.Arguments.Item(0)) = false Then
Alert "You dragged a file, not a folder! My god." & vbcrlf & "Script will terminate immediately", 0, "Alert: User is stupid", 48
WScript.Quit
Else
targetDir = WScript.Arguments.Item(0)
Wshso.Popup targetDir
End If
Else
targetDir = Wshso.SpecialFolders("Desktop")
Alert "Note: No folder to traverse detected, default set to:" & vbcrlf & Wshso.SpecialFolders("Desktop"), 0, "Alert", 48
End If
如果是没有Unicode字符的普通路径就可以了。但在这种情况下:
目录:4minute (포미닛) - Hit Your Heart
然后它会显示类似的内容4minute (?) - Hit Your Heart
如果我执行FolderExists,它无法找到拖动的文件夹。
是否有任何解决方法来支持 Unicode 命名文件夹?
Thanks!
如果这还不够清楚,我会编辑
这似乎确实是 Windows 脚本宿主特有的问题DropHandler shell 扩展。然而:
test.vbs "C:\포미닛.txt"
C:\WINDOWS\System32\WScript.exe "test.vbs" "C:\포미닛.txt"
从控制台输入时两者都可以工作(即使控制台无法呈现韩文,所以它看起来像?
),应生成相同命令的拖放操作会经历 Unicode->ANSI->Unicode 转换,该转换会丢失当前 ANSI 代码页中不存在的所有字符。 (所以포미닛
可以在默认的韩语 Windows 安装上使用,但不能在西语 Windows 上使用。)
我不知道解决问题的正确方法。您也许可以通过更改注册表中 .vbs 文件的 DropHandler 来解决此问题:
HKEY_CLASSES_ROOT\VBSFile\ShellEx\DropHandler\(Default)
来自 WSH DropHandler ({60254CA5-953B-11CF-8C96-00AA00B8708C}
) to {86C86720-42A0-1069-A2E8-08002B30309D}
,用于 .exe、.bat 和类似文件的文件,不会出现此问题。您可能还需要更改 .vbs 的文件关联,以便在文件名参数周围加上引号,因为 EXE DropHandler 不会这样做,以避免文件名中出现空格问题。
由于这会影响所有 VBS 文件的参数传递,因此部署在除您自己的计算机之外的任何计算机上都是一个危险的修复。如果您需要这样做,也许您可以尝试使用适当的 DropTarget 创建一个新的文件扩展名,而不是更改 VBSFile 本身?或者也许放弃拖放到脚本上的行为并提供文件打开对话框或手动拖放字段。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)