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.

sjsjsjs8989
la source
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"
    }
}

la source
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.