Script Windows pour copier des fichiers de la source à la destination uniquement si le fichier de destination est plus petit ou n'existe pas


2

J'ai deux répertoires avec des fichiers similaires

C: \ dir1 et C: \ dir2

J'ai besoin de créer un script qui copie le contenu de Dir 1 à Dir 2 mais ne copie le fichier que si le fichier source a une taille de fichier supérieure à celle du fichier de destination ou si le fichier n'existe pas.

Je n'ai pas réussi à trouver un moyen de faire cela avec powershell ou cmd.


Faut-il que ce soit seulement des fichiers 'plus gros'? Ou voulez-vous copier les fichiers "modifiés"?
Ob1lan

recherche PowerShell Filesystemwatcher
SimonS

Veuillez noter que superutilisateur.com n'est pas un service gratuit de rédaction de scripts / codes. Si vous nous dites ce que vous avez essayé jusqu'à présent (inclure les scripts / codes que vous utilisez déjà) et où vous êtes bloqué, nous pouvons essayer de vous aider avec des problèmes spécifiques. Vous devriez également lire Comment poser une bonne question? .
DavidPostill

Réponses:


1
Get-ChildItem "C:\Dir1" | Where-Object {-Not $_.PsIscontainer} | % {
    $file1 = $_.FullName;
    $file2 = $file1 -replace ("C:\Dir", "C:\Dir2")
    If (Test-Path $file2)
    {
        $file1s=$_.Length
        $file2s=(Get-Item $file2).Length
        if ($file1s -gt $file2s)
        {
            Copy-Item $file1 "C:\Dir2" -Force
        }
    }
    else
    {
        Copy-Item $file1 "C:\Dir2"
    }
}

Merci, ce script m'a vraiment aidé. La partie qui me manquait est de pouvoir utiliser la partie .length pour extraire une liste. Juste une note cependant. Cette ligne ("C: \ Dir", "C: \ Dir2") est incorrecte car l'expression regex reconnaît le \ comme faisant partie de l'expression que je l'ai corrigée avec les indications de ce sujet stackoverflow.com/questions/2333675/… . Merci encore
sjsjsjs8989

En fait, ce n’est pas faux car la résolution automatique RegEx est désactivée dans PowerShell. RegEx dans PowerShell ne fonctionne que lorsque vous fournissez la chaîne à une cmdlet consommant RegEx. Get-ChildItem ne consomme pas de RegEx. CONSEIL: la fonction de saisie semi-automatique de PowerShell vous donne le même résultat.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.