Переименование нескольких файлов с несколькими . внутри них

Я новичок в программировании или написании сценариев, поэтому надеюсь, что термины, которые я использую, будут правильными.

1. Я пытаюсь переименовать несколько файлов в нескольких папках.

2. Я не знаю имен папок, я могу знать только папки, в которых находятся эти подпапки, каждой папке назначается отдельная отметка времени и даты.

3. Я не знаю названия файлов, содержащихся в каждой папке.

4. В каждой из этих папок имена файлов точно такие же, как и в других папках.

5.Я знаю расширение файлов во всех папках - ".t"

Итак, что я пытаюсь сделать, это следующее:

Оригинальные файлы:

Имя папки: FolderA

"Log1000_1.1.1.1_Base.1.textlog.t"

"Log1000_1.1.1.1_Base.2.textlog.t"

Имя папки: FolderB

"Log1000_1.1.1.1_Base.1.textlog.t"

"Log1000_1.1.1.1_Base.2.textlog.t"

Желаемый результат:

Имя папки: 2015-02-19%3A224044

"Log1000_1.1.1.1_Base.1.2015-02-19%3A224044.textlog"

"Log1000_1.1.1.1_Base.2.2015-02-19%3A224044.textlog"

Имя папки: 1.2015-02-19%3A224060

"Log1000_1.1.1.1_Base.1.2015-02-19%3A224060.textlog"

"Log1000_1.1.1.1_Base.2.1.2015-02-19%3A224060.textlog"

И так далее...

Я пробовал следующий код:

cd C:\DataCollection\ClassOne

REM Creating a list of all folders

dir /b /a:d >>C:\DataCollection\ClassOne\tempfolderlist.txt

for /R /F "tokens=*" %%A in (C:\DataCollection\ClassOne\tempfolderlist.txt) do (
        cd C:\C:\DataCollection\ClassOne\%%A
        ren *.t *%%A.textlog
)

У меня есть 2 проблемы с приведенным выше кодом

  1. Цикл войдет только в папку, изменит 1 расширение файла (и только 1 файл) и оставит остальные файлы нетронутыми/неизмененными.

Я могу предположить, что это связано с тем, что цикл проходит по каждой строке txt-файла один раз.

2. По какой-то причине процесс переименования файла идет неправильно.

Выходной файл выглядит следующим образом:

"Log1000_1.1.1.2015-02-19%3A224044.textlog"

Пока должно выглядеть так:

Log1000_1.1.1.1_Base.1_2015-02-19%3A224044.textlog

Есть ли у кого-нибудь идеи или предложения, как исправить код или альтернативно предложить другой?

Спасибо вам всем


person Chen Mordechai    schedule 19.03.2015    source источник


Ответы (1)


@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
FOR /f "delims=" %%a IN ('dir /s /b /a-d "%sourcedir%\*.t" ') DO (
 FOR /f "delims=" %%d IN ("%%~dpa.") DO (
  FOR /f "delims=" %%p IN ("%%~na.") DO (
   ECHO(REN "%%a" "%%~np.%%~nxd%%~xp"
  )
 )
)

GOTO :EOF

Вам нужно будет изменить настройку sourcedir в соответствии с вашими обстоятельствами.

Требуемые команды REN просто ECHOed для целей тестирования. Убедившись, что команды верны, измените ECHO(REN на REN, чтобы действительно переименовать файлы.

Это работает путем выполнения списка каталогов из *.t файлов из выбранного каталога и применения каждого имени к %%a.

%%d получает диск+каталог+. поэтому часть имени %%d (%%~nd) является именем родительского каталога файла.

%%p аналогичным образом получает только часть имени файла, поэтому часть имени %%p — это часть перед .textlog, а часть расширения — .textlog.

Ударьте соответствующие части вместе с требуемым ., и переименование готово к выполнению.

person Magoo    schedule 19.03.2015