У меня есть файлы вроде

test_abc.html
haha_test_someword.js
haha_morehaha_test_continue_test.someextension

Я хочу заменить все тесты в определенной папке рекурсивным способом. Таким образом, результат будет:

 tommy_abc.html
    haha_tommy_someword.js
    haha_morehaha_tommy_continue_tommy.someextension

Возможно ли это в командной строке Windows с помощью команды ren?

3 ответа3

1

Я не верю, что команда ren может делать то, что вы хотите, сама по себе, но пакетный скрипт, использующий ren может.

Я вчера ответил на очень похожий вопрос о переполнении стека. Вот модифицированная версия этого пакетного скрипта для решения вашей проблемы. Он справляется с несколькими заменами в одном имени файла:

setlocal ENABLEDELAYEDEXPANSION
set SEARCH_TEXT=test
set REPLACE_TEXT=tommy
for %%A in ("*%SEARCH_TEXT%*") do (
    set OLD_NAME=%%~nxA
    set NEW_NAME=!OLD_NAME:%SEARCH_TEXT%=%REPLACE_TEXT%!
    ren "!OLD_NAME!" "!NEW_NAME!"
)
endlocal

Опять же, текст справки из SET /? Команде может потребоваться чтение для того, чтобы справиться с этим.

1

Используйте цикл for для рекурсивного переименования. Подстановочные знаки для подстановки текста.

for /r %x in (*test*.*) do ren "%x" "*tommy*.*"

Совет: если выполнение команды один раз не заменяет все "тесты", запустите команду несколько раз или используйте другой цикл for.

Как использовать подстановочные знаки в аренду

Рекурсивная аренда

0

Powershell

gci "C:\files" | ren -n {$_.Name -replace 'test','tommy'}

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