J'utilise la méthode Shell CopyHere de Windows pour décompresser les archives dans certains lots. Il fonctionne généralement, comme indiqué dans l'exemple de script ci-dessous, mais donne une erreur dans certains cas. En particulier, j'ai trouvé qu'il donne une erreur lors de décompresser une archive dans un dossier système spécial comme Téléchargements, si elle a été déplacée par un utilisateur à un nouvel emplacement, malgré le dossier symlink a été laissé par OS dans son emplacement par défaut dans le profil utilisateur et l'utilisateur dispose d'autorisations d'écriture pour le nouvel emplacement. Existe-t-il un moyen de contourner cette limitation ou de modifier le code ci-dessous sans modifier son approche hybride globale par lots?La méthode Shell CopyHere de Windows prend-elle en charge la redirection?
<!-- : Begin batch script
@echo off
set "dir=%temp%" & set "file=%USERPROFILE%\Backup\archive.zip\"
cscript //nologo "%~f0?.wsf" "%dir%" "%file%"
exit /b
----- Begin wsf script --->
<job><script language="VBScript">
set fso = CreateObject("Scripting.FileSystemObject")
Set Ag=Wscript.Arguments
If NOT fso.FolderExists(Ag(0)) Then
fso.CreateFolder(Ag(0))
End If
set objShell = CreateObject("Shell.Application")
set FilesInZip = objShell.NameSpace(Ag(1)).items
objShell.NameSpace(Ag(0)).CopyHere(FilesInZip)
set fso = Nothing
set objShell = Nothing
</script></job>
:: Error if user profile's Downloads folder was moved from default location
\test.bat?.wsf(15, 3) Microsoft VBScript runtime error: Object required: 'objShell.NameSpace(...)'
@ Dummy00001 Pourquoi pensez-vous que Shell tag ne concerne pas à ma question, si elle demande directement sur le Méthode Shell utilisée dans le lot? OMI est un exemple typique de modification mineure inutile interdite par les règles SO faites pour justifier downvote sans aucune tentative de répondre à la question. – sambul35
Le lot est un hybride, les pls ne suppriment pas l'étiquette de la méthode Shell. Malheureusement, toute balise liée à l'utilisation des méthodes shell est tronquée à Shell par le site. – sambul35
La balise 'shell' est utilisée pour les shells Unix/Linux/POSIX, pas pour Windows. Il suffit de lire la description de l'étiquette. – Dummy00001