У меня есть около 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
Любые идеи о том, как заставить это работать правильно?
Просто используйте escape-символ \:
При запуске строки в каталоге:
get-childitem -recurse | rename-item -newname { $_.name -replace "\$","s"}
Входной файл:
$hortvid.mp4
Выходной файл переименован:
shortvid.mp4
Возможно, вы можете объяснить, почему это работает для более полного ответа.
$ используется для указания переменной в powershell. И строка с двойной кавычкой оценивается в powershell следующим образом:
$variable1 = "Hello"
$variable2 = "$variable1 world"
$variable2
Если вы не хотите переводить символ в строку с двойными кавычками, вы можете использовать обратную косую черту, как в предложенном решении @lww. Или просто, вы можете использовать простую цитату. Так :
Get-ChildItem -recurse | Rename-Item -Newname { $_.Name -replace '$', 's'}
Для эффективности я настоятельно рекомендую вам включить фильтр, чтобы гарантировать, что вы передаете только те файлы, которые содержат этот символ в первую очередь. например gci -Filt *$* -File -Rec | rni …