2010-12-06 47 views
3

Je suis confronté à des problèmes avec les dossiers nommés Unicode. Lorsque je fais glisser le dossier sur le script, il n'affiche pas le chemin du dossier correctement.Dossier nommé Unicode? dans l'invite wscript

Simple VBScript (ce qui est juste une partie de celui-ci):

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 

Si c'est un chemin normal sans caractères Unicode, il est très bien. Mais dans ce cas: Répertoire: 4minute (포미닛) - Hit Your Heart

Ensuite, il montrera quelque chose comme 4minute (?) - Hit Your Heart

Et si je fais un FolderExists il ne peut pas trouver le dossier traîné.

Existe-t-il une solution de contournement pour prendre en charge les dossiers nommés Unicode?

Merci!

Je vais modifier si cela ne suffit pas clairement

Répondre

3

Cela ne semble pas être un problème propre à DropHandler shell extension de Windows Script Host. Attendu que:

test.vbs "C:\포미닛.txt" 
C:\WINDOWS\System32\WScript.exe "test.vbs" "C:\포미닛.txt" 

travaillent tous les deux fois dactylographié de la console (même si la console ne peut pas rendre le Hangul il ressemble ?), une opération de glisser-déposer qui devrait aboutir à la même commande passe par un Unicode -> ANSI-> traduction Unicode qui perd tous les caractères qui ne sont pas dans la page de code ANSI en cours. (Donc, 포미닛 fonctionnera sur une installation Windows coréenne par défaut, mais pas sur Western.)

Je ne connais pas de méthode appropriée pour résoudre le problème. Vous pourriez peut-être travailler autour d'elle en changeant la DropHandler des fichiers .vbs dans le Registre:

HKEY_CLASSES_ROOT\VBSFile\ShellEx\DropHandler\(Default) 

du WSH DropHandler ({60254CA5-953B-11CF-8C96-00AA00B8708C}) à {86C86720-42A0-1069-A2E8-08002B30309D}, celui utilisé pour .exe, .bat et similaire, qui n » Je souffre de ce problème. Vous devrez aussi probablement changer l'association de fichier pour .vbs pour mettre des guillemets autour de l'argument du nom de fichier, puisque l'EXE DropHandler ne le fait pas, pour éviter les problèmes avec les espaces dans les noms de fichiers. Comme cela affecte le passage d'arguments pour tous les fichiers VBS, il serait difficile de déployer sur n'importe quelle machine, sauf la vôtre. Si vous aviez besoin de faire cela, peut-être que vous pourriez essayer de créer une nouvelle extension de fichier avec le DropTarget approprié plutôt que de changer VBSFile lui-même? Ou peut-être renoncer à un comportement drop-on-script et fournir un fichier Ouvrir une boîte de dialogue ou un champ de dépôt manuel à la place.

+0

Merci pour la clarification. Je ne suis pas au courant du DropHandler (nouveau à VBScript), je lirai dessus. Je viens de découvrir que je peux faire '.BrowseForFolder'. Mais si je l'utilise, je peux toujours faire glisser un dossier sur le script, et le script sera toujours lancé. Est-il possible de le désactiver? Merci! –

+0

Je vais accepter cette réponse si dans les 24 heures personne n'est en mesure de fournir une solution définitive à ce problème. =) –

+0

Vous ne pouvez pas empêcher un .vbs étant drop-on-able, non (sans enlever l'extension DropHandler pour tous les fichiers .vbs, de toute façon). Je suppose que la meilleure chose serait d'accepter les fichiers déposés et d'ouvrir une erreur s'ils ne peuvent pas être trouvés en raison du problème Unicode. Puis suivi avec un navigateur de dossiers. – bobince

1

Pour toute personne débarquant ici de Google ...

la pointe de Bobince me conduire à contourner ce problème en encapsulant mon fichier vbscript (de myscript.vbs) dans un fichier batch DOS (mybatch.bat).

La pointe était:

« Semblent être un problème propre à l'extension du shell de DropHandler de Windows Script Host alors .... celui utilisé pour .exe, .bat et similaires ... ne souffre pas de ce problème. "

mybatch.chauve-souris contient:

:Loop 
IF "%1"=="" GOTO Continue 
    set allfiles=%allfiles% "%1" 
SHIFT 
GOTO Loop 
:Continue 
"myscript.vbs" %allfiles% 

Vous pouvez également trouver ce code de mes myscript.vbs être utile

For Each strFullFileName In Wscript.Arguments 
    ' do stuff 
Next 
+0

pourriez-vous étendre votre réponse, et donner un exemple complet de votre code? – Qbik