Script sous windows.

Résolu
firac Messages postés 44 Statut Membre -  
firac Messages postés 44 Statut Membre -
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. Yaggoth Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   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.
    0
  2. firac Messages postés 44 Statut Membre 2
     
    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?
    0
  3. Yaggoth Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   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).
    0
  4. firac Messages postés 44 Statut Membre 2
     
    Merci l'ami c'est bon.
    0