6
votes

PowerShell, des fichiers de masse en mouvement d'un certain type

Je veux faire un script qui prendra un répertoire parent qui possède un certain nombre de répertoires d'enfants qui les ont des fichiers. En utilisant une liste, je souhaite déplacer tous les fichiers dans les annuaires enfants dans le répertoire parent.

J'ai créé le code suivant jusqu'à présent, qui donne une liste de tous les fichiers du type spécifié dans les annuaires de l'enfant, mais je ne sais pas comment déplacer une masse de tous les fichiers enfants. xxx


0 commentaires

3 Réponses :


4
votes

Si j'ai bien compris votre question correctement, vous pouvez utiliser Move-item code> sur les fichiers pour les déplacer dans le répertoire de sortie:

$Dir = get-childitem $sourceDir -recurse
$files = $Dir | where {$_.extension -eq "$format"}
$files | move-item -destination $outDir


0 commentaires

12
votes

Quelques choses:

  1. Vous pouvez transmettre le texte que vous écrivez à l'écran directement sur la cmdlet Lecture-Host, cela vous permet d'économiser une ligne par entrée utilisateur.

  2. en règle générale, si vous envisagez de faire plus avec une sortie d'une commande, ne le conduisez pas au format- * CMDlets. Le format CMDlets produit des objets de formatage qui indique à PowerShell comment afficher le résultat à l'écran.

  3. Essayez d'éviter d'attribuer le résultat à une variable, si le résultat contient un ensemble important de système de fichiers, la consommation de mémoire peut aller très haut et vous pouvez subir une dégradation de performance.

  4. Encore une fois, en termes de performances, essayez d'utiliser les paramètres de la cmdlet au lieu de la cmdlet OU-OBJECT (filtrage latéral du serveur vs côté client). Le premier filtre les objets sur la cible pendant que ce dernier filtre les objets uniquement après l'accès à votre machine.

    Le commutateur Whatif vous montrera quels fichiers auraient déplacé. Supprimez-le pour exécuter la commande. Vous devrez peut-être aussi tendre la twick pour traiter des noms de fichier en double. xxx


1 commentaires

Merci pour les conseils que je vais essayer d'affiner mon approche à l'avenir et à prendre à bord ce que vous avez communiqué. La syntaxe PowerShell semble être très adaptée à certaines des tâches que j'ai besoin pour effectuer ainsi l'apprentissage de la manière de l'utiliser efficacement sur ma liste d'objectifs



1
votes

Une affiche précédente a souligné que le script écraserait les fichiers du même nom. Il pourrait être possible d'étendre le script par un test et d'éviter cette possibilité. Quelque chose comme ceci: xxx


0 commentaires