Script sous windows.

Résolu
Bonjour.
Aidez svp à ecrire ce script:
Nous sommes sous l'environnement windows. Nous avons un repertoire nommé travaux contenant aussi bien des fichiers texte, audio, video et des repertoires. Nous nous placons dans le repertoire parent du repertoire travaux. Notre objectif est de renommer travaux en works sans utiliser la commande permettant de renommer. La methode consiste à créer le repertoire works et de copier tout le contenu du repertoire travaux dans works. Enfin on supprime travaux et son contenu. Ecrire un script permettant de renommer par recopie.

4 réponses

  1. Il suffit de retirer les commentaires, ils ne servaient qu'a la compréhension du code.

    Donc ça donne :

    Xcopy Travaux Works /E /I /G /H /K /O /X
    IF %ERRORLEVEL% == 0 THEN
    GOTO SUPPRESSION
    GOTO ERREUR
    :SUPPRESSION
    rd Travaux /S /Q 
    goto FIN
    :ERREUR
    Echo Une erreur s'est produite, fin du script
    :FIN
    


    Si tu retires la gestion d'erreur d'arrive à ça

    Xcopy Travaux Works /E /I /G /H /K /O /X
    rd Travaux /S /Q
    


    Mais le problème est que si une erreur se produit pendant la copie des fichiers, le dossier sera quand meme supprimé ce qui peut être très dangereux.

    La solution basé sur PowerShell ne souffre pas de se problème car l'instruction de suppression n'est executé que si la copie à fonctionné (test implicite).
    1. Salut, merci beaucoup mais c`est que etant un novice dans ce domaine est ce que je peux avoir un batch le plus simple possible?
      1. Je vois pas trop l'interêt, de ce script ou sinon je n'ai pas du comprendre ce que tu demandes.

        Dans le doute je propose quand même une réponse :

        En Batch
        REM retour au dossier parent
        Cd ..
        REM Copie de tous les fichiers et dossiers (y compris les dossiers vide) et création du dossier s'il n'existe pas (/I)
        REM /G pour la prise en charge des fichiers crypté
        REM /H pour la prise en charge des fichiers caché
        REM /K Copie des attributs (lecture seule, archive, ...)
        REM /O pour la copie des ACL (droits sur les fichiers)
        REM /X pour la copie de la DACL (liste d'audit)
        Xcopy Travaux Works /E /I /G /H /K /O /X
        REM On gette les erreurs
        IF %ERRORLEVEL% == 0 THEN
        GOTO SUPPRESSION
        GOTO ERREUR
        
        :SUPPRESSION
        REM On supprime le dossier Travaux sans confirmation
        rd Travaux /S /Q 
        goto FIN
        
        :ERREUR
        Echo Une erreur s'est produite, fin du script
        
        :FIN
        


        En VBS
        CONST DOSSIER_SOURCE = "Travaux"
        CONST DOSSIER_DESTINATION = "Works"
        
        'On crée une procédure recursive pour la copie des fichiers et dossiers
        Sub CopierArborescence (pstrSource, pstrDestination)
        	Set lobjFileSystemobject = CreateObject("Scripting.FileSystemobject")
        	
        	If lobjFileSystemobject.FolderExists(pstrSource) then
        		Set lobjDossierSource = lobjFileSystemobject.GetFolder(pstrSource)
        		
        		'On crée le dossier destination s'il n'existe pas
        		If Not lobjFileSystemobject.FolderExists(pstrDestination) then
        			lobjFileSystemobject.CreateFolder(pstrDestination)
        		End If
        		
        		'On copie tous les fichiers
        		For Each lobjFichier In lobjDossierSource.Files
        			lobjFichier.Copy pstrDestination & "\" & lobjFichier.Name
        			lobjFichier.Delete
        		next
        		
        		'On relance le traitement pour chaque dossier
        		For Each lobjDossier In lobjDossierSource.SubFolders
        			CopierArborescence lobjDossier.Path, pstrDestination & "\" & lobjDossier.Name
        			lobjDossier.Delete
        		Next
        	Else
        		Wscript.Echo "Dossier " & DOSSIER_SOURCE & " est introuvable"
        		Wscript.Quit
        	End if
        End Sub
        
        
        CopierArborescence DOSSIER_SOURCE, DOSSIER_DESTINATION
        


        En PowerShell V1/V2
        ## Encore plus simple, en une ligne
        copy-item Travaux Works -recurse;Remove-Item Travaux -recurse
        
        ## l'avantage de l'avoir sur une ligne c'est que si l'instruction de copie échoue, t'es sur que le remove ne se lancera pas
        


        Voilà en esperant que cela puisse t'aider.