1

В настоящее время у нас есть общий ресурс CIFS, размещенный на устройстве SAN, и мы планируем перейти к системе управления делами. У меня проблема в том, что многие файлы в нашей общей папке заканчиваются завершающей точкой (.) И не могут быть загружены.

Я пытался заставить работать скрипт, который бы сохранял имена файлов одинаковыми, но пакетным способом удалял все конечные точки. Я смог сделать это с помощью различных специальных символов, используя powershell.

У нас также есть много подпапок с точкой (.) В середине имени папки, и мы должны оставить их в покое.

пример

Оригинальное имя файла: 20151101 Луис К. Абришамян MD.pdf

Новое имя файла: 20151101 Луис К. Абришамян MDpdf

Я использовал этот, чтобы удалить все & из имен файлов

Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("&", "and") }

Я попробовал этот, но он не смог сделать то, что мне нужно

Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("*.", "") }

4 ответа4

0

Попробуйте следующее:

Get-ChildItem -recurse -name |  ForEach-Object { If($_.Substring($_.Length-1) -eq ".") { Move-Item $_ $_.Substring(0,$_.Length-1) } }

Это будет получать каждый элемент, проверьте, является ли последний символ . и, если это так, он переместит его на то же имя без последнего символа.

0

Вы могли бы попробовать

Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_  ([regex]::Replace($_, "\.$" , "")) }
0

Пришел от анонимного человека на powershell.org

# Replace '..' from names (remove one dot)
Get-ChildItem -Recurse -Path .\my\path | Rename-Item -NewName {$_.name -replace '\.\.','.'} -WhatIf
0

Ни один лайнер для меня.

foreach ($file in (Get-ChildItem 'C:\test' -Recurse) ){
  $newName = $file.DirectoryName + '\' + ( $file.Basename.replace('.', '').replace('&', 'and') ) + $file.Extension
  move-item $file.FullName $newName 
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .