Пакетная замена символов в именах файлов

У меня есть около 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

Любые идеи о том, как заставить это работать правильно?

Для эффективности я настоятельно рекомендую вам включить фильтр, чтобы гарантировать, что вы передаете только те файлы, которые содержат этот символ в первую очередь. например gci -Filt *$* -File -Rec | rni …

Compo 21.12.2020 12:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
1
1 930
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Просто используйте escape-символ \:

При запуске строки в каталоге:

get-childitem -recurse | rename-item -newname { $_.name -replace "\$","s"}

Входной файл:

$hortvid.mp4

Выходной файл переименован:

shortvid.mp4

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

Doug Maurer 21.12.2020 02:41

$ используется для указания переменной в powershell. И строка с двойной кавычкой оценивается в powershell следующим образом:

$variable1 = "Hello"
$variable2 = "$variable1 world"
$variable2

Если вы не хотите переводить символ в строку с двойными кавычками, вы можете использовать обратную косую черту, как в предложенном решении @lww. Или просто, вы можете использовать простую цитату. Так :

Get-ChildItem -recurse | Rename-Item -Newname { $_.Name -replace '$', 's'}

Другие вопросы по теме