2017-10-16 69 views
0

我试图重命名一堆子文件夹中的一堆文件。 我希望他们有一个 '前缀',与它们被放置在子文件夹coresponds批量重命名文件,具体取决于它们所在的子文件夹

例:

  • 主文件夹:
    • Subfolder1
    • Subfolder2
    • Subfolder3

Subfolder1中的所有文件应重命名为“Subfolder1_filename.pdf”,其余文件夹的文件相同。

$dir = 'C:\Users\user\desktop\testfolder\' 

foreach ($i in $dir){ 
    $foldername = Get-ChildItem $dir -name 
    cd $newdir 
    rename-item -NewName {$foldername + "_" + $_.Name} 
} 

回答

0
$Files = Get-ChildItem -Path $Dir -Recurse -File 

ForEach ($File in $Files) 
{ 
    $FolderName = ((Split-Path -Path $File.FullName -Parent) -split '\\')[-1] 
    $FileName = $File.Name 
    Rename-Item -Path $File.FullName -NewName "${FolderName}_$FileName" 
} 

这将实现根据自己的集装箱重命名它们,但你需要利用Move-Item如果要移动+重命名,或这种性质的东西。

+0

感谢您的回答! 我收到此错误消息,因为我尝试了您的代码。 Rename-Item:无法将参数绑定到参数'Path',因为它为null。 在C:\ Users \ user \ desktop \ testfolder \ ps.ps1:16 char:22 + Rename-Item -Path <<<< $ File.FullName -NewName“$ {FolderName} _ $ FileName” + CategoryInfo :InvalidData:(:) [重命名-项目],ParameterBinding ValidationException + FullyQualifiedErrorId:ParameterArgumentValidationErrorNullNotAllowed,男 icrosoft.PowerShell.Commands.RenameItemCommand – user1851594

+0

你捕捉到的文件用'GET-ChildItem' @ user1851594? – TheIncorrigible1

+0

它似乎并不像捕获这些文件。我试图缩小代码下来,只是为了检查: '$ DIR = 'C:\用户\ BIT \桌面\ QGIS_LEG \测试\' $文件= GET-ChildItem $目录-Recurse -file 回报$文件' – user1851594