@echo off
Setlocal enabledelayedexpansion

Set "Pattern=rename"
Set "Replace=reuse"

For %%a in (*.jpg) Do (
Set "File=%%~a"
Ren "%%a" "!File:%Pattern%=%Replace%!"
)

Это переименовывает .jpgs с подстрокой 'rename'. Ссылка: https://stackoverflow.com/questions/16128869/how-to-rename-file-by-replacing-substring-using-batch. Кто-нибудь может заставить меня понять, как цикл for выполняет эту работу? Кроме того, возможно ли здесь использовать переключатель /f , чтобы избавиться от «Отказано в доступе»? И где я могу разместить nul?

1 ответ1

2

For %%a in (*.jpg) Do ( - говорит, получить список каталогов каждого файла с расширением jpg и дать мне текущее имя в переменной %%a и сделать что-то (что следует в скобках). Я не уверен, откуда будет Access Denied , возможно, вам не хватает прав файловой системы для переименования одного или нескольких файлов.

Реальное усилие этой команды исходит от enabledelayedexpansion который позволяет переменной заменить синтаксис.

Ren "%%a" "!File:%Pattern%=%Replace%!" - Часть переименования может быть упрощена до ren this that ... хитрость в том, что второй блок с восклицательными знаками ... запускает замену переменных.

"!File:%Pattern%=%Replace%!" - для переменной File (задайте в строке выше полный путь и имя файла текущего файла в цикле for - что необязательно в этом списке каталогов) замените все вхождения Pattern на Replace . Pattern строке 5 для шаблона задано переименование, а для повторного использования в строке 6 задано Replace поэтому эта команда говорит: в указанном имени файла замените все вхождения строки переименовывать на повторное использование .

Чтобы скомпилировать все это:

  1. Для всех файлов с расширением jpg в текущем каталоге

  2. Переименуйте файл, чтобы все вхождения строки rename теперь для reuse

for /f для чтения текстового содержимого одного или нескольких файлов построчно - так что нет, это вам здесь не поможет.

Откуда этот nul ?

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