IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Récupération nom de fichier/repertoire avec espace [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 61
    Points
    61
    Par défaut Récupération nom de fichier/repertoire avec espace
    Bonjour,

    Je tente de compresser tous les fichiers contenus à partir d'un chemin passé en paramètre et d'un nombre de jeux (les fichiers plus vieux que x jours seront traités)

    Ex structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    E:\backup
          Dossier1
               Fichier1.BAK
               Fichier2.BAK
          Dossier2
               Fichier1.BAK
    Mon soucis intervient lorsque le nom du dossier et le nom du fichier contiennent un espace...

    Voici mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    # compression selon l'age
    # Script de compression (parametrable en ligne de commande)
    
    # path to 7z.exe 
    $s7zExe = "C:\Program Files\7-Zip\7z.exe"
    
    # recuperation parametres
    $sTargetParam = $args[0]
    [int]$sAgeParam =  $args[1]
    
    # age max d'un log en minutes
    $iAgeMaxLog = 60
    
    # verifier que le repertoire passe en parametre existe
    if ((Test-Path -path $sTargetParam ) -ne $True ) {
        write-host   "Le repertoire a traiter n'existe pas !"
        write-host	"`nscript <chemin_a_traiter> <duree_retention_en_jours>`n"
        exit
    }
    
    # tous les fichiers plus vieux que $iAgeMaxEnJour seront supprimes
    $iAgeMaxEnJours = $sAgeParam
    
    # repertoire a purger
    $sTarget =  $sTargetParam + "\*"
    
    #date du jour
    $sdDate = Get-Date
    $sdDateLim = $sdDate
    write-host "iagemax... : " $iAgeMaxEnJours
    $sdDateLim =  $sdDate.AddDays(((-1)*$iAgeMaxEnJours))
    
    # log ecrit plus frequemment
    $sdDateLimLog = $sdDate.AddMinutes((-1) * $iAgeMaxLog)
    
    write-host   "sdDateLim : " $sdDateLim
    
    # .bak : full backups
    $lFichiersBak = Get-ChildItem $sTarget -Include *.bak -Recurse | Where-Object { $_.LastWriteTime -lt $sdDateLim }
    # .trn : logs de transaction
    $lFichiersTrn = Get-ChildItem $sTarget -Include *.trn -Recurse | Where-Object { $_.LastWriteTime -lt $sdDateLimLog }
    
    $lListeComplete = $lFichiersBak + $lFichiersTrn
    
    # effectuer la purge
    foreach ($File in $lListeComplete)
    {
    	$sArchive = "$File" + ".7z"
    	$sNomFichier = "$File"
    
    	# -and (!(Test-Path $sArchive ) )
      if (  ($sNomFichier.length -gt 1 )  -and (!(Test-Path $sArchive ) ) )
      {
    		#write-host "$s7zExe a -bd $File.7z $File" 
    		write-host
    		write-host "-------------------- $File ------------------"
    		$proc = New-Object System.Diagnostics.Process;
    		$proc.StartInfo.FileName = "$s7zExe";
    
    		# parametres de 7zip
    		$proc.StartInfo.Arguments = ("a","-bd",$sArchive,$File);
    
    		$proc.StartInfo.UseShellExecute = $false;
    		$proc.StartInfo.RedirectStandardOutput = $true;
    		$proc.Start();
    		Measure-Command { $proc.WaitForExit() }
    		if ( $proc.ExitCode -eq 0 ) {
    			write-host "`ncompression ok (creation $sArchive )"
    			Remove-Item $File
    		}
    		
       } else {
    		write-host "on passe $sNomFichier"
       }
    }
    Merci d'avance pour votre aide

  2. #2
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 114
    Points : 94
    Points
    94
    Par défaut
    un probleme de nom court non-8dot3 ??

    avant tu tri ton string si il contiens un espace
    $string = cmd /c "dir /x"
    aprés tu tri pour recupere le nom court ...

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    As-tu essayé d'entourer ton nom de variable avec des guillemets :

  4. #4
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 61
    Points
    61
    Par défaut
    Oui, j'ai essayé mais rien n'y fait.
    J'ai également essayé avec des accolades
    ${filename}

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Je regarde ça dés que j'ai un peu de temps.
    Tu utilises la V1 de PowerShell ?

  6. #6
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 61
    Points
    61
    Par défaut
    Merci !
    Je vais continuer mes tests, si je trouve quelque chose je le posterai

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 61
    Points
    61
    Par défaut
    Eurêka!
    Grace à ce lien (http://bytes.com/topic/net/answers/8...dersrand-space), j'ai la solution à mon souci : il fallait ajouter 2 doubles quotes autour des variables passées en paramètre et ça a marché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $proc.StartInfo.Arguments = ("a","-bd","""$sArchive""","""$File""");
    Si ça peut servir à quelqu'un...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Url avec nom de fichier contenant un espace
    Par kanabzh29 dans le forum Langage
    Réponses: 3
    Dernier message: 07/10/2008, 13h14
  2. Comment eviter l'erreur d'un nom composé de colonne avec espace?
    Par soror dans le forum Bases de données
    Réponses: 8
    Dernier message: 13/07/2007, 13h54
  3. Réponses: 6
    Dernier message: 14/06/2007, 15h36
  4. [VBA-E] Récupération Nom de fichier
    Par trihanhcie dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 02/03/2007, 13h53
  5. [AJAX] Récupération d'un fichier JSON avec javaScript
    Par guerin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/11/2006, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo