2016-06-23 19 views
0

я должен пройти через множество уровней дочерних папок и удаления специальных символов, которые являются недопустимыми в SharePoint, в основном «# &»Рекурсивный удаление/переименование файлов с помощью PowerShell

я рыскал по интернету, пробуя различные команды; rename-item/move-item, варианты двух, все безрезультатно. Ближайший я получил это с помощью:

Get-ChildItem -Recurse | Rename-Item -NewName {$_.Name -replace'[[email protected]#&]','_'} 

, но я постоянно получаю эту ошибку: Rename-пункт: Источник и путь назначения должны быть разными.

Может ли кто-нибудь указать мне в правильном направлении?

С уважением

ответ

2

Эта ошибка происходит только при попытке переименовать каталог, в то же NewName в качестве текущего имени, вы можете спокойно игнорировать его.

Добавить -ErrorAction SilentlyContinue беззвучно подавить сообщение об ошибке:

Get-ChildItem -Recurse | Rename-Item -NewName {$_.Name -replace'[[email protected]#&]','_'} -ErrorAction SilentlyContinue 
+1

Я не поклонник этого. Что, если существуют 'MyFile_1.txt' и' MyFile # 1.txt'? –

+0

@BaconBits тогда ничего не происходит –

+1

Да, но вы не получаете сообщение об ошибке или предупреждение или что-то еще, и вы, вероятно, хотите получить ошибку, потому что вы не можете переименовать файл, который вам действительно нужен. –

0

Вам необходимо отфильтровать файлы, которые вы не планировали переименовать:

Get-ChildItem -Recurse | 
    Where-Object { $_.Name -match '[[email protected]#&]' } | 
    Rename-Item -NewName {$_.Name -replace '[[email protected]#&]','_'} 
0

что-то подобное может работать

dir -Recurse -File | ? basename -Match '[[email protected]#&]' | % { 
    # if the file.txt already exists, rename it to file-1.txt and so on 
    $num = 1 
    $base = $_.basename -replace'[[email protected]#&]', '_' 
    $ext = $_.extension 
    $destdir = Split-Path $_.FullName 
    $newname = Join-Path $destdir "$base$ext" 
    while (Test-Path $newname) { 
     $newname = Join-Path $destdir "$base-$num$ext" 
     $num++ 
    } 

    ren $_.fullname $newname 
} 
Смежные вопросы