Пакетный файл Заменить / Переименовать - PullRequest
0 голосов
/ 20 июля 2011

Я хочу переименовать группу файлов в каталоге с помощью командного файла. Я хочу сделать это:

file_XX_img.tiff to file_32_img.tiff

У меня есть этот код

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set fName=%1
if '%1' equ '' set /p fName=Enter file name:


for /f "delims==" %%F in ('dir /b *.aaa') do ren "%%~nxF" "%%~nF"

pause

, который переименовывает расширение, но я хочу преобразовать его, чтобы я мог заменить XX на число. Как мне изменить его, чтобы он работал в этой ситуации?

---------------------------------- EDIT ------------ ---------------------------------

понял это:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set fName=%1
set /p vers=Enter Vers:
for /f "delims==" %%F in ('dir /b file_XX*.*') do ren "%%~nxF" "file_%vers%*.*"
pause

1 Ответ

2 голосов
/ 20 июля 2011

Есть несколько проблем с вашим решением.

  1. Параметр %1 сохраняется в переменной fname, но фактически никогда не используется.

  2. Переименование таких файлов будет работать, как ожидается, только для двузначных значений vers.Если бы это была 1 цифра, результат был бы как file_3X_img.tif.Если бы это было больше 2 цифр, у вас было бы что-то вроде этого (для 4 цифр): file_3210mg.tif.

Я полагаю, что ваше решение может еще подходить вам некоторое время (возможно,До тех пор, пока вы не достигнете 100).Тем не менее, вы можете рассмотреть следующую альтернативу:

@ECHO OFF
SET "vers=%~1"
IF "%vers%" == "" SET /P "vers=Enter Vers: "
FOR %%F IN (file_XX_*.*) DO CALL :process "%%F"
GOTO :EOF

:process
SET "name=%~nx1"
SETLOCAL ENABLEDELAYEDEXPANSION
SET "name=!name:_XX_=_%vers%_!"
RENAME %1 "%name%"
ENDLOCAL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...