Пакетный файл для чтения имен файлов из CSV и переименования файлов в папке - PullRequest
0 голосов
/ 11 марта 2020

У меня есть набор кодов в файле, я хочу переименовать файлы в папке с этим кодом. Как первый код для первого файла, затем второй код для второго файла.

for /f "delims=" %%x in (code.csv) do call :rename "%%x" 
pause
GOTO :EOF

:rename
REN "*.jpg" "a/%1.jpg"

Это то, что я написал, но это похоже на выполнение первого кода для всех файлов, и я получаю повторяющееся имя файла, которое существует или файл не может найти ошибку. Несмотря на то, что файлы переименовываются, но на это уходит много времени, что, как я полагаю, из-за ненужного зацикливания.

Любая помощь для его совершенствования будет оценена

1 Ответ

1 голос
/ 11 марта 2020

Вам нужен способ читать каталог и csv параллельно. Для этого есть хитрость:

@ECHO OFF
setlocal enabledelayedexpansion
<code.csv (
  for /f "delims=" %%x in ('dir /b *.jpg') do (
    set "NewName="
    set /p NewName=
    if not defined NewName goto :eof
    ECHO ren "%%x" "!NewName!"
  )
)

ПРИМЕЧАНИЕ: удалите команду ECHO, убедившись, что она действительно выполняет команду ren.

<code.csv ( ... ) обеспечивает одну строку за другой для set /p в пределах for l oop. Очистите его перед чтением, чтобы переменная NewName стала неопределенной, когда больше нет имен из csv. Выйдите из for l oop, когда он не определен (больше имен нет).

l oop останавливается, когда больше нет файлов для переименования или нет новых имен из csv file.

См. dir /? - особенно переключатель /o для сортировки файлов (при необходимости) по именам, датам или размерам.

Другой возможностью является сборка массив содержимого csv или файлов, но я думаю, что это избыточное решение для этой задачи.

...