web-dev-qa-db-fra.com

Copiez un fichier d'un dossier à un autre à l'aide de vbscripting

Quelqu'un peut-il me dire comment copier un fichier d'un dossier à un autre à l'aide de vbscripting J'ai essayé ceci ci-dessous à partir des informations fournies sur Internet.

dim filesys

set filesys=CreateObject("Scripting.FileSystemObject")

If filesys.FileExists("c:\sourcefolder\anyfile.txt") Then

filesys.CopyFile "c:\sourcefolder\anyfile.txt", "c:\destfolder\"

Lorsque j'exécute celui-ci, j'obtiens que l'autorisation est refusée.

16
maddy

Essaye ça. Il vérifiera si le fichier existe déjà dans le dossier de destination et s'il le fera, vérifiera si le fichier est en lecture seule. Si le fichier est en lecture seule, il le changera en lecture-écriture, remplacera le fichier et le rendra en lecture seule à nouveau.

Const DestinationFile = "c:\destfolder\anyfile.txt"
Const SourceFile = "c:\sourcefolder\anyfile.txt"

Set fso = CreateObject("Scripting.FileSystemObject")
    'Check to see if the file already exists in the destination folder
    If fso.FileExists(DestinationFile) Then
        'Check to see if the file is read-only
        If Not fso.GetFile(DestinationFile).Attributes And 1 Then 
            'The file exists and is not read-only.  Safe to replace the file.
            fso.CopyFile SourceFile, "C:\destfolder\", True
        Else 
            'The file exists and is read-only.
            'Remove the read-only attribute
            fso.GetFile(DestinationFile).Attributes = fso.GetFile(DestinationFile).Attributes - 1
            'Replace the file
            fso.CopyFile SourceFile, "C:\destfolder\", True
            'Reapply the read-only attribute
            fso.GetFile(DestinationFile).Attributes = fso.GetFile(DestinationFile).Attributes + 1
        End If
    Else
        'The file does not exist in the destination folder.  Safe to copy file to this folder.
        fso.CopyFile SourceFile, "C:\destfolder\", True
    End If
Set fso = Nothing
32
Tester101

Voici une réponse, basée sur (et je pense une amélioration par rapport à) la réponse de Tester101, exprimée comme un sous-programme, avec la ligne CopyFile une fois au lieu de trois, et préparée à gérer le changement de nom de fichier au fur et à mesure de la copie (pas de code dur répertoire de destination). J'ai également constaté que je devais supprimer le fichier cible avant de le copier pour que cela fonctionne, mais cela pourrait être une chose Windows 7. Les instructions WScript.Echo sont parce que je n'avais pas de débogueur et peuvent bien sûr être supprimées si vous le souhaitez.

Sub CopyFile(SourceFile, DestinationFile)

    Set fso = CreateObject("Scripting.FileSystemObject")

    'Check to see if the file already exists in the destination folder
    Dim wasReadOnly
    wasReadOnly = False
    If fso.FileExists(DestinationFile) Then
        'Check to see if the file is read-only
        If fso.GetFile(DestinationFile).Attributes And 1 Then 
            'The file exists and is read-only.
            WScript.Echo "Removing the read-only attribute"
            'Remove the read-only attribute
            fso.GetFile(DestinationFile).Attributes = fso.GetFile(DestinationFile).Attributes - 1
            wasReadOnly = True
        End If

        WScript.Echo "Deleting the file"
        fso.DeleteFile DestinationFile, True
    End If

    'Copy the file
    WScript.Echo "Copying " & SourceFile & " to " & DestinationFile
    fso.CopyFile SourceFile, DestinationFile, True

    If wasReadOnly Then
        'Reapply the read-only attribute
        fso.GetFile(DestinationFile).Attributes = fso.GetFile(DestinationFile).Attributes + 1
    End If

    Set fso = Nothing

End Sub
5
Chuck Wilbur

Pour copier le fichier unique, voici le code:

Function CopyFiles(FiletoCopy,DestinationFolder)
   Dim fso
                Dim Filepath,WarFileLocation
                Set fso = CreateObject("Scripting.FileSystemObject")
                If  Right(DestinationFolder,1) <>"\"Then
                    DestinationFolder=DestinationFolder&"\"
                End If
    fso.CopyFile FiletoCopy,DestinationFolder,True
                FiletoCopy = Split(FiletoCopy,"\")

End Function
3
user2043336

Je viens de publier mon code terminé pour un projet similaire. Il copie des fichiers de certaines extensions dans mon code, son pdf tif et tiff vous pouvez les changer en ce que vous voulez copier ou supprimer les instructions if si vous n'avez besoin que de 1 ou 2 types. Lorsqu'un fichier est créé ou modifié, il obtient l'attribut archive. Ce code recherche également cet attribut et le copie uniquement s'il existe, puis le supprime après sa copie afin de ne pas copier les fichiers inutiles. Il a également une configuration de journal afin que vous puissiez voir un journal de l'heure et du jour où tout a été transféré depuis la dernière exécution du script. J'espère que ça aide! le lien est Erreur: Objet requis; Code 'objDIR': 800A01A8

0
ELewis