2014-01-30 3 views
0

У меня есть группа папок двух уровней глубоких, как:Использование командной строки Windows Для переименования папки

Folder A 
    Sub Folder A – 1 
     <Files> 
    Sub Folder A – 2 
     <Files> 
Folder B 
    Sub Folder B – 1 
     <Files> 
Folder C 
    Sub Folder C – 1 
     <Files> 
    Sub Folder C – 2 
     <Files> 
    Sub Folder C – 3 
     <Files> 

мне нужно использовать Windows 7 CommandLine или Powershell переименовать вложенные папки так, что она включает в себя родительской папки имя в нем, как

Sub Folder A - 1 

будет переименован в

Folder A - Sub Folder A - 1 

возможно?

Thanks

ответ

2

Этот код должен сделать это за вас.

$RootDirectory = 'c:\test'; 

# 1. Get list of parent folders 
$ParentFolderList = Get-ChildItem -Path $RootDirectory -Directory; 

# 2. Iterate over top-level folders 
foreach ($ParentFolder in $ParentFolderList) { 
    $ChildFolderList = Get-ChildItem -Path $ParentFolder.FullName 

    # 3. Iterate over subfolders of top-level folders, and rename them 
    foreach ($ChildFolder in $ChildFolderList) { 
     $NewFolderName = '{0}\{1} - {2}' -f $ParentFolder.FullName, $ParentFolder.Name, $ChildFolder.Name; 
     Rename-Item -Path $ChildFolder.FullName -NewName $NewFolderName -WhatIf; 
    } 
} 

Удалить параметр -WhatIf из Rename-Item командлета, чтобы он внести изменения.

+0

Спасибо! Во второй строке появляется ошибка: «Невозможно найти параметр, который соответствует имени параметра« Directory ».» Есть идеи? Еще раз спасибо! – Nullqwerty

+0

Да, я думаю, вы, вероятно, работаете с PowerShell v2. Вы можете обновить Windows 7 до версии 4.0! 1) Установите .NET Framework 4.5.1, а затем 2) установите пакет Windows Management Framework Core 4.0. –

+1

Собственно получил. Ошибка глупого пользователя. Я новичок в PS. Я вложил это в окно Powershell. По какой-то причине ему это не понравилось. Когда я превратил его в файл .PS1 и запустил его, он работал отлично. Благодаря тонну! – Nullqwerty

1

Вы можете запустить как летучая мышь по команде оперативной

for /d %%i in (*) do (
    for /d %%x in ("%%i/*") do ren "%%i/%%x" "%%i - %%x" 
) 
+0

Cryptic, но круто, если он работает! –

Смежные вопросы