Пакетное удаление символов из имени файла без изменения расширения - PullRequest
0 голосов
/ 03 сентября 2018

Приведенный ниже пакетный код удаляет символ «x» из имен файлов, но также удаляет «x» в расширении «.docx». Как запретить коду переименовывать расширение?

for /f "delims=" %%a in ('dir /b /a-d *x*.docx') do (
    set "fname=%%~a"
    setlocal enabledelayedexpansion
    set "nname=!fname:x=!"
    ren "!fname!" "!nname!"
    endlocal
)

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018
for /f "delims=" %%a in ('dir /b /a-d *x*.docx') do (
    set "fname=%%~na"
    setlocal enabledelayedexpansion
    set "nname=!fname:x=!"
    ren "%%a" "!nname!%%~xa"
    endlocal
)

Запуск CMD из той же папки, что и файлы, которые нужно переименовать.

См. Разбор имени файла в пакетном файле и другие идиомы

0 голосов
/ 03 сентября 2018

Разделите имя из расширения, используя %%~na и %%~xa, затем выполните замену только имени, а затем просто объедините новое имя с расширением.

Вам также не нужен dir cmd. если ваши файлы находятся в корне D:\test, запустите:

@echo off
setlocal enabledelayedexpansion
for %%a in ("D:\test\*x*.docx" ) do (
    set "fname=%%~a"
    set "xonly=%%~xa"
    set "nonly=%%~dpna"
    set "nonly=!nonly:x=!"
    ren "!fname!" "!nonly!!xonly!"
)

Если ваши файлы находятся в подкаталогах внутри D:\test, выполните рекурсивный поиск:

@echo off
setlocal enabledelayedexpansion
for "D:\Test" /R %%a in (*x*.docx) do (
    set "fname=%%~a"
    set "xonly=%%~xa"
    set "nonly=%%~dpna"
    set "nonly=!nonly:x=!"
    ren "!fname!" "!nonly!!xonly!"
)

Обратите внимание, что %%~a будет диском и файлом, поэтому мы должны установить !nonly! в качестве диска, пути и имени, другими словами %%~dpna

Для получения дополнительной информации о подстановке переменных откройте cmd.exe и выполните for /?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...