En fin de compte, j'ai besoin d'un script Solid PowerShell qui prendra un dossier avec plusieurs centaines de fichiers vidéo, importez les noms de fichiers existants dans le programme, consultez le nouveau nom de fichier dans un CSV et renommez-le. L'ancien nom de fichier est simplement (c.-à-d. Fichier1.mp4, fichier2.mp4, etc.) J'aimerais ajouter une date à l'avant du fichier au format de (AAAA-MM-DD).
pour tester, J'ai créé un dossier sur mon bureau avec (10) fichiers texte, chacun avec un nom de fichier unique. P>
Mon fichier CSV apparaît comme suit: p>
Image de CSV P>
La colonne" NewFileName ", a été créée à l'aide de la commande de concaténate dans Excel. p> autant que je voudrais juste que PowerShell de gérer tout, je me sens en utilisant Excel pour la majeure partie de cela pourrait être la meilleure façon. P> dans mon Test, tout était dans un dossier. Cependant, au travail, je disposerai de fichiers vidéo sur un lecteur et que le script devra être dans un dossier sur mon bureau. Parce que je suis dans un réseau d'entreprise, j'ai besoin d'un fichier de commandes spécial pour exécuter mes scripts, ce qui n'est rien de nouveau. Je viens de modifier le nom du script, et tout va bien! P> Alors, quelles commandes dois-je faire pour que le script soit séparé des fichiers vidéo et du fichier CSV? P> Voici le code que j'ai jusqu'à présent. Tout fonctionne quand c'est dans un dossier. P> merci d'avance pour l'aide! P> chris p> p> P>
3 Réponses :
$targetdir="C:\path\to\where\our\file\directory\is"
$pathtocsv="c:\path\to\csv.csv"
Import-Csv -Path $pathtocsv | ForEach-Object {
$Src = Join-Path -Path $TargetDir -ChildPath $_.filename
$Dst = Join-Path -Path $TargetDir -ChildPath $_.newfilename
Rename-Item -Path $Src -NewName $Dst
}
Why would this not work in any situation?
OP, votre cas d'utilisation est-il suffisamment étroit que les chemins codés durs correspondent au besoin ou justifient-il un script paramétré à l'aide de fonctions avancées ou d'importations de module?
Je ne sais pas quelle est la colonne Date dans votre fichier Excel et si vous souhaitez renommer tous les fichiers du dossier, mais si tel est le cas, vous n'avez pas besoin de fichier CSV et que vous pouvez le faire. :
$sourceFolder = 'X:\Path\to\the\video\files' # change this to the real path
Get-ChildItem -Path $sourceFolder -Filter '*.mp4' -File | # iterate through the files in the folder
Where-Object {$_.Name -notmatch '^\d{4}-\d{2}-\d{2}'} | # don't rename files that already start with the date
Rename-Item -NewName { '{0:yyyy-MM-dd} {1}' -f $_.LastWriteTime, $_.Name } -WhatIf
La colonne Date est ce que j'ai utilisé pour concaténer à ce qui deviendrait le nouveau nom de fichier. Je sais que vous avez dit que je n'aurais pas besoin du fichier CSV, mais je pense que j'en ai encore besoin, sauf si je manque quelque chose de tout à fait. J'ai juste ajouté des doubles citations au chemin source. Comment a-t-il tiré la date réelle que le fichier a été publié? Il correspond parfaitement au fichier CSV que j'ai créé. Les dates de sortie sont-elles en quelque sorte liées aux métadonnées de chaque fichier?
@Chrisranes Oui, le Get-Childitem Code> collecte des objets FileInfo (dans ce cas en raison du commutateur code> -FILE code> Il n'y aura pas d'objet DIAMPERIFO). Ces objets contiennent beaucoup d'informations sur chaque fichier, y compris le LastwriteTime. Ceci est la dernière date modifiée que vous voyez dans Explorer. Donc, cette date est déjà présente et vous n'avez pas besoin de créer un fichier CSV «entre-intermédiaire» pour cela.
Wow! Merci beaucoup. Cela sera définitivement utile d'aller de l'avant. S'il y avait une raison pour laquelle j'avais besoin d'utiliser un CSV, dites-vous si la "dernière date modifiée" n'était pas incluse pour une raison quelconque, comment modifieriez-vous votre script pour pouvoir renommer les fichiers?
@Chrisranes La date de la quartwritetime est toujours présente. Lookup FileInfo pour voir toutes les propriétés disponibles. Si vous sentez que ma réponse a résolu votre problème, je vous serais reconnaissant si vous l'acceptez en cliquant sur l'icône de coche à côté.
Aurais-je besoin de modifier l'une de ces commandes pour exécuter sur PowerShell 2.0? Le script comme écrit fonctionne bien avec le PS intégré à Windows 10. Cependant, au travail, sous Windows 7, et en exécutant le fichier de commandes suivant pour obtenir le script à exécuter, je reçois l'erreur suivante.
Fichier de commandes: PowerShell.exe -noexit -nologo -ExecuePolyPasse de bypassePolicale -Noprofile -File Rename.Ps1 Erreur: Get-ChildItem: Un paramètre est introuvable qui correspond au nom de paramètre 'Fichier'. À C: \ Users \ Cranes \ Desktop \ PowerShell scripts \ Rename.ps1: 2 Char: 56 + Get-Childitem -Path $ SourceFolder -Filter '* .mp4' -File <<<< | # Itérer via les fichiers dans le dossier + CatégorieInfo: InvalidApport: (:) [Get-ChildItem], ParameterBindingException + PullalifiedErrorId: NamedParameTernotFound, Microsoft.Powershell.comMands.getchil DitemCommand
@ChrisRanes Oui, sur PS <3.0, le commutateur -file code> n'existe pas. Pour cela, vous devez supprimer -file code> et modifier le où-objet code> sur où-objet {! $ _. Nom -NotMatch '^ \ d {4} - \ d {2} - \ d {2}'} code>. Cela fonctionne également dans des versions supérieures de Powershell, mais est plus inefficace. Si possible met à jour PowerShell, car v2 est vraiment vieux ..
Au fait, si le CSV avait le chemin de colonnes et le nouveauame, il pourrait être de la pipi directement à Rename-item:
Pouvez-vous reformuler la déclaration suivante, je ne suis pas sûr de ce que vous entendez par cela: "Alors, quelles commandes dois-je faire pour que le script soit séparé des fichiers vidéo et du fichier CSV?"
Je conviens que cela devrait être reformulé pour plus de clarté. Je pense qu'ils veulent simplement demander comment faire référence à des choses dans le répertoire actuel. @Chris, il vous suffit d'utiliser des chemins complets vers les fichiers (script, vidéos, csv). Aucune commande spéciale n'est nécessaire sauf si je suis mal compris ce que vous demandez là-bas.
Désolé d'être incertain. Oui, je demandais simplement à quelles commandes dois-je ajouter au script pour que je puisse exécuter le script à partir d'un dossier, séparé des fichiers réels que je dois renommer.