#windows #powershell #cmd #file-rename #batch-rename
#Windows #powershell #cmd #файл-переименовать #пакетное переименование
Вопрос:
У меня около 600 видеофайлов со специальным символом $ в названии.
Я хочу пакетно заменить это буквой s.
Я нашел приведенный ниже код powershell в Интернете, и он отлично работает при замене букв другими буквами, но терпит неудачу при попытке заменить специальный символ $
get-childitem -recurse | rename-item -newname { $_.name -replace "",""}
Я попытался использовать приведенный ниже код, и в итоге вместо замены типа файла добавляется символ s в конец
get-childitem -recurse | rename-item -newname { $_.name -replace "$","s"}
$hortvid.mp4 становится $hortvid.mp4s вместо shortvid.mp4
Есть идеи о том, как заставить это работать правильно?
Комментарии:
1. Для повышения эффективности я настоятельно рекомендую включить фильтр, чтобы гарантировать, что вы передаете только те файлы, которые содержат этот символ в первом экземпляре. например
gci -Filt *$* -File -Rec | rni …
Ответ №1:
Просто используйте
escape-символ:
При запуске строки в каталоге:
get-childitem -recurse | rename-item -newname { $_.name -replace "$","s"}
входной файл:
$hortvid.mp4
выходной файл переименован:
shortvid.mp4
Комментарии:
1. Возможно, вы можете объяснить, почему это работает для более полного ответа.
Ответ №2:
$ используется для указания переменной в powershell. И строка с двойными кавычками вычисляется в powershell следующим образом :
$variable1="Hello"
$variable2="$variable1 world"
$variable2
если вы не хотите преобразовывать символ в строку с двойными кавычками, вы можете использовать обратную косую черту, как предлагаемое решение @lww. Или просто, вы можете использовать простую кавычку.
Вот так :
Get-ChildItem -recurse | Rename-Item -Newname { $_.Name -replace '
, 's'}